1、new关键字创建的是引用类型;
eg. var box = new Object();
     box.name = "Linda";//引用类型添加属性没问题
    alert(box.name);
2、基本类型添加属性会输出undefined
eg. var box = "Linda";
     box.height = 185;
   alert(box.height);//undefined
3、复制变量值:基本类型复制值本身,引用类型复制地址。
eg. 基本类型复制变量(即两个变量操作互不影响)
     var str1 = "Lee";
       var str2 = str1;
       str1 = "hello";
       console.log(str1);//hello
       console.log(str2);//lee
eg. 引用类型复制变量(box和box2都是指向同一个变量,若是name属性改了,则box.name 和 box2.name的值都会相应改变)
        var str3 = new Object();
        str3.name = "Bob";
        var str4 = str3;
        console.log(str3.name);//Bob
        console.log(str4.name);//Bob
4、传递参数:参数不会按引用传递(局部变量),直接按值传递,即使变量有基本类型和引用类型之分。
eg.基本类型传递参数
  function fn(num) { //num是局部变量
         num += 10;
         return num;
       }
       var num = 50;
       var result = fn(num);
       console.log(result);//60
       console.log(num);//50 与上面的局部变量无关
eg.引用类型传递参数
 function fun(obj) {
          obj.address = "四川";
        }
        var p = new Object();
        fun(p);
        console.log(p.address);//四川
5、检测类型:
1)typeof(一般用于检测数据类型)
eg.       var ty = true;
        console.log(typeof ty);//boolean
2)instanceof(检测是什么类型的对象:数组、字符串(特殊)等)
eg.     var ty1 = [1, 25, 59, 265];
        console.log(ty1 instanceof Array);//检测是否是数组 true
        var ty2 = {};
        console.log(ty2 instanceof Object);//检测是否是对象 true
        var ty3 = /g/;
        console.log(ty3 instanceof RegExp);//检测是否是正则 true
        var ty4 = new String("Linda");
  var str = "hello";
       console.log(typeof str);//string

console.log(str instanceof);//false

       var str2 = new String("hello");
      console.log(str2 instanceof String);//true
6、执行环境和作用域
执行环境定义了函数或变量有权访问的其他数据,并决定了各自的行为。
全局执行环境就是最外围的指向环境,即window对象
     var box1 = "blue";
        function setBox(){
          console.log(box1);//访问全局变量
        }
        setBox();//执行函数
    var boxn="hello";
        function getBox(){
          console.log(window.boxn);//全局变量即window的属性
        }
        window.getBox();//全局函数即window的方法
eg.通过传参替换函数体内的局部变量,但是作用域仅限于函数体内的局部环境
  var boxn="hello";
        function getBox(boxn){//通过传参替换了全局变量
          console.log(boxn);//WORLD
        }
        getBox("WORLD");
        console.log(boxn);//hello
eg.每个函数调用时都会创建自己的执行环境,执行后把控制权交给上一级的执行环境
        var color="yellow";
        function setColor(){
          function getColor() { //getColor的执行环境在getColor内
            var color1 = "green";
            console.log(color);//yellow
            console.log(color1);//green
          }
          getColor();
        }
        setColor();
7、没有局部作用域:if语句、for语句
eg.var关键字在函数体内的意义
function number(number1,number2) {
          var sum = number1 + number2; //此时sum是局部变量,去掉var就是全局,报错
          return sum;
        }
        console.log(number(15,20));
        console.log(sum);//报错 sum is undefined
8、内存问题
javaScript会自行管理内存分配及无用内存的回收
一般来说确保占用最少的内存可让页面获得更好的性能,那么优化内存的最佳方案就是一旦数据不再有用,就将其设置为null来释放引用即解除应用.
eg.var p = {
   name:"hello"
  }
  p = null;

js基础——变量、作用域、内存的更多相关文章

  1. JS基础学习——作用域

    JS基础学习--作用域 什么是作用域 变量的作用域就是变量能被访问到的代码范围,比如在下面的这个js代码中,变量a的作用域就是函数foo,因此在全局作用域内的console.log(a)语句不能访问到 ...

  2. js的变量作用域

    js不支持块级变量作用域,而是包含它们的函数的作用域, 例如: function query() { ; ; i < ; i++) { var b = i; } return b + a; } ...

  3. js学习--变量作用域和作用域链

    作为一名菜鸟的我,每天学点的感觉还是不错的.今天学习闭包的过程中看到作用域与作用域链这两个概念,我觉得作为一名有追求的小白,有必要详细了解下. 变量的作用域 就js变量而言,有全局变量和局部变量.这里 ...

  4. JS基础语法---作用域

    作用域:使用范围 全局变量: 声明的变量是使用var声明的, 那么这个变量就是全局变量 全局变量可以在页面的任何位置使用 除了函数以外, 其他的任何位置定义的变量都是全局变量 局部变量:在函数内部定义 ...

  5. js的变量作用域 ,变量提升

    (function(){ a = 5; alert(window.a); var a = 10; alert(a); })(); 结果: undefined 10 代码等同于下面 var a = un ...

  6. 【 js 基础 】作用域和闭包

    一.编译过程 常见编译性语言,在程序代码执行之前会经历三个步骤,称为编译. 步骤一:分词或者词法分析 将由字符组成的字符串分解成有意义的代码块,这些代码块被称为词法单元. 例子:  var a = 2 ...

  7. 《JavaScript 高级程序设计》读书笔记四 变量 作用域 内存

    一   变量(基本类型和引用类型) a.基本类型保存值,保存在栈内存,引用类型保存指针,保存在堆内存: b.所有函数的参数都是按值进行传递的,不管参数是何种类型: c.检测类型 typeof     ...

  8. JS基础-变量类型和类型转换

    JS 变量类型 JS中有 6 种原始值,分别是: boolean number string undefined symbol null 引用类型: 对象 数组 函数 JS中使用typeof能得到哪些 ...

  9. Linux C/C++基础——变量作用域

    1.局部变量 局部变量也叫auto自动变量(auto可写可不写),一般情况下代码块{}内部定义的变量都是自动变量,它有如下特点: 只有当执行到这句语句时,系统才为这个变量分配空间 在一个函数内定义,只 ...

随机推荐

  1. Ajax--Ajax基于原生javascript:创建Ajax对象、链接服务器、发送请求、接受响应结果

    Ajax概述 异步:指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步. 同步请求: 请求是由浏览器发送 页面会刷新 异步请求: 请求是由浏览器的一 ...

  2. oracle编写分页过程

    有了上面的基础,相信大家可以完成分页存储过程了,要求,请大家编写一个存储过程,要求可以输入表名.每页显示记录数.当前页.排序字段(deptno降序).返回总记录数,总页数和返回结果集. 把一个字符串, ...

  3. 阿里巴巴资深技术专家无相:我们能从 InteliJ IDEA 中学到什么?

    本文来源于阿里巴巴资深技术专家无相在内网的分享,阿里巴巴中间件受权发布. 最近因为工作的关系,要将 Eclipse 的插件升级为 IDEA 插件.升级过程中,对 IDEA 插件做了些学习和研究,希望通 ...

  4. 使用php实现单点登录实例详解

    1.首先准备两个虚拟域名 127.0.0.1 www.openpoor.com 127.0.0.1 www.myspace.com 2.在openpoor的根目录下创建以下文件 index.php文件 ...

  5. python ASCII编码集

  6. jQuery 五角星评分

    五角星打分 我用的是搜狗输入法上带的特殊符号打出来的  空五角星:☆  实五角星:★ 1.html <ul class="comment"> <li>☆&l ...

  7. Linux保证运行一个实例

    1. ; // 默认最大路径长度 inline std::string current_exe_name() { }; int ret = readlink("/proc/self/exe& ...

  8. react-cli

    更新日志: v1.2.0 ...未完待续 v1.1.0 添加editorconfig 配置ESLint 集成prettier 集成 lint-staged 实现细节: 添加editorconfig e ...

  9. winfrom 中 label 文字随着窗体大小变化

    在进行winfrom 开发过程中,窗体中的文字需要随着窗体大小变化,否则会影响窗体的美观和客户的体验. 之前曾经试过几种方法效果都不满意,例如将label的Dock 属性设置为fill.这样的设置对解 ...

  10. Dataphin公共云重磅发布,提供一站式智能数据构建与管理能

    点击订阅新品发布会! 新产品.新版本.新技术.新功能.价格调整,评论在下方,下期更新!关注更多内容,了解更多 最新发布 Dataphin公共云重磅发布 2019年6月26日15时,阿里云Dataphi ...