JavaScript变量,作用域和变量问题(个人整理)

一:变量:基本类型值和引用类型值。

1:基本类型值:undefined,null,boolean,number,string。不能为其值添加属性。

2:引用类型值:按引用访问。可以添加和删除属性和方法。

(二):复制变量值

1:复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。这两个变量是可以参与任何操作而不会相互影响的。

2:复制引用类型的值,两个变量实际上引用的是同一个对象。因此,改变其中一个变量,就会影响另一个变量。

var obj1=new Object();
var obj2=obj1;
obj1.name='aa';
alert(obj2.name);  //'aa'

 

(三):传递参数

1:所有函数的参数都是按值传递的。(假如是按引用传递的话,count的值会变成30,从而反映函数内部的修改)

 function addTen(num) {
            num += 10;
            return num;
        }
        
        var count = 20
        var result = addTen(count);
        alert(count);    //20,没有变化,因为参数是按值传递。
        alert(result);   //30

  

(四):检测类型


1:typeof检测基本数据类型

 var s = "Nicholas";
        var b = true;
        var i = 22;
        var u;
        var n = null;
        var o = new Object();
        
        alert(typeof s);   //string
        alert(typeof i);   //number
        alert(typeof b);   //Boolean
        alert(typeof u);   //undefined
        alert(typeof n);   //object
        alert(typeof o);   //object

 2:instanceof检测引用类型(在检测一个引用类型值和object构造函数时,返回true;检测基本数据类型返回false)。

 

二:执行环境及作用域


1:变量对象:每个执行环境都有一个环境变量,在这个环境中定义的所有变量和函数都保存在这个对象中。

2:全局执行环境是最外围的一个执行环境。某个执行环境中的所有代码执行完毕后,保存在其中的变量和函数也被销毁(全局执行环境在网页关闭等操作后销毁)。

3:活动对象:最开始只包含一个变量,即arguments对象(在全局执行环境中不存在)。

4:内部环境可以通过作用域链访问所有的外部环境,但是外部环境不可以访问内部环境中的所有变量和函数。(可向上,不可向下)

 

(一):延迟作用域

1:try-catch语句的catch块。

2:with语句。

 

(二):没有块级作用域

1:if语句和for语句的{}内部的变量会存在循环外部的执行环境中。

2:使用var声明的变量会自动添加到最近 的环境中。在with语句中 ,最接近的环境是函数环境。

function add(num1, num2) {
            var sum = num1 + num2;
            return sum;
        }
        
        var result = add(10, 20);  //30
        alert(sum);                //sum是局部变量,会报错。

3:没有使用var声明的变量,会被添加到全局执行环境中。

    function add(num1, num2) {
            sum = num1 + num2;   //sum为全局变量
            return sum;
        }
        
        var result = add(10, 20);  //30
        alert(sum);                //30

4:查询标识符:向上查询,现在局部环境,向上直到全局执行环境,全局中也没找到则该变量未定义。

       var color = "blue";
        
        function getColor(){
            var color = "red";
            return color;
        }
        
        alert(getColor());  //"red"

  

   var color = "blue"; //只能使用window.color调用
        
        function getColor(){
            return color; //现在局部环境找color,没找到向全局环境中找.
        }
        
        alert(getColor());  //"blue"

  

三:垃圾收集

1:标记清除(最常用)。

2:管理内存:解除引用:将其值设置为null。

 

 

posted @ 2016-06-13 22:12  _林冲  阅读(182)  评论(0)    收藏  举报