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();
 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值