javascript闭包实例

闭包:让函数内的变量,可以让外部访问和修改。即从外部读取局部变量

实例一:

var person = function () {
    var name = 'zhangsan';
    return {
        getName : function () {
            alert(name);
        },
        
        setName : function (newName) {
            name = newName;
        }
    }
}();

使用:

person.getName();  //结果:name='zhangsan'

person.setName('wangwu'); //设置属性值

person.getName();//结果:name='wangwu'  属性值变了

为什么匿名函数执行完毕,name变量没被回收?

原因就在于匿名函数是getName和setName的父函数,而getName和setName调用了匿名函数name变量,而getName和setName的存在依赖于匿名函数name变量,表示匿名函数name变量还在用所以不会被回收。 因此匿名函数也始终在内存中,不会在调用结束后,被垃圾回收机制(garbage collection)回收。

实例二

//每次执行一次c()i加1。关键在于var c=a();c容器将i装载记住了。

function a(){
var i=0;
function b(){
alert(++i);
}
return b;
}
var c=a();
c();
 
 
实例三

function a(){
var i =0;
function b(){
var i =0;  //为什么把这句注释掉,执行a()时i是undefined? 答:执行b()函数,函数体i = i+1语句,所以i要先声明在使用。
i = i+1;
alert(i);
}
return b();
}

a();
 
 
 
原文地址:https://www.cnblogs.com/chenweichu/p/5664037.html