(7)javascript 变量、作用域、内存

1 基本类型和引用类型的值

  1.1 基本类型 :简单的数据段 基本数据类型:undefined null boolean number string 可以操作保存在变量中的实际的值

  1.2 引用类型的值 : 保存在内存中的对象 、可以为其添加、删除属性和方法。

  1.3 复制变量值

  

基本类型 引用类型的值
会在对象创建一个新值,将该值复制到新变量分配的位置上  同样会将储存在变量中的值复制一份到新分配的内存上
  不同的是引用类型的值的复制,引用的是同一个对象,改变其中i一个变量就会影响到另一个变量

   基本类型复制:var num1 = 5;var num2 = num1;

   
   
num1 5

  复制后

   
num2 5
num1 5

  引用类型的值复制:var obj1 = new Object();

            var obj2 = obj1;

            obj1.name = "JACKEY";

            alert(obj2.name);//JACKEY

  

 

  1.4 传递参数:

    1.4.1 传递基本类型:function add(num){

                 num = num+10;  

                return num;

                }

              var num = 10;

              console.log(add(num));//20

              console.log(num);//10

              不改变外局的num,相当于基本类型的复制值座位参数传递进函数里面

    1.4.2 传递引用类型的值:function setName(obj){

                  obj.name = "Jackey";

        

                  }

                  var person = new Object();

                  setName(obj);

                  console.log(obj.name);//Jackey

                  使用引用类型的值做参数的时候,按值传递(不知道这样理解对不)

                  function setName(obj){

                  obj.name = "Jackey";

                  obj = new Object();

                  obj.name="Cassi";

}

                  var person = new Object();

                  console.log(person.name)//Jackey

                  内部新建的对象在函数执行完成之后销毁了,所以引用仍然没变

2 执行环境及作用域

   1 执行环境 :定义了变量或函数有权访问的其他数据,决定了他们各自的行为

  2 变量环境: 每个执行环境都有一个与之相关联的变量对象,定义所有的变量和函数

  3 全局执行环境:在web浏览器中,window是全局执行变量

  4 环境栈:每个函数都有自己的执行环境,当执行流进入一个函数时,函数的环境就会被推入一个环境栈中。当函数执行之后,栈将其环境弹出,把控制权返回给之前的执行环境。 

   5 作用域链 :当代码在一个环境中执行的时候,会创建变量对象的一个作用域链。保证执行环境有权访问所有的变量和函数的有序访问。

  6 活动对象 :

  7 延长作用域链:try{}catch{} with语句

  8 没有块级作用域

    if(true){

    var color = "blue";

}

  console.log(color);//blue

3 垃圾收集

  1 标记清除:当变量进入环境,就将这个变量标记为“进入环境”,离开时就标记为“离开环境”。 

   2 引用计数

4 性能问题

   内存数量、垃圾收集时间间隔、

  收集过程:window.collectGarbage();IE

    window.opera.collect();opera7++

5 管理内存

  一旦数据不再有用,最好将其设置为null来释放其引用

原文地址:https://www.cnblogs.com/lihaozhou/p/3572589.html