JavaScript 闭包

闭包:函数可以访问它被创建时所处的上下文环境。

 

示例1:

var myobj = function () {
    var value = 0;

    return {
        increment: function (inc) {
            value += typeof inc === 'number' ? inc : 1;
        },
        getvalue: function () {
            return value;
        }
    };
} ();


解释:

    以上代码并没有把一个函数赋给变量myobj, 而是把这个匿名函数的执行结果赋给了myobj,注意最后一行的()。 即使这个匿名函数已经返回了,myobj仍然可以访问这个匿名函数的私有变量value。

 

示例2:

var myobj = function (o) {
    return {
        change_status: function (s) {
            o.status = s;
        },
        get_status: function () {
            return o.status;
        }
    };
};

var testobj = myobj({ id: 'C1000', nm: 'Apple', status: 0 });
testobj.change_status(1);
testobj.get_status();

解释:

    调用myob时,它返回一个包含了2个方法的对象。

    实例化myobj时,myobj返回的对象的一个引用被保存在testobj中。

    即使myobj已经返回了,testobj仍然可以访问实例化myobj时传入的那个参数,并且它访问的不是那个参数的一个拷贝,而就是那个参数本身。

 

      

你可能感兴趣的:(JavaScript 闭包)