在看js中的闭包

function t1(){

var age=20;

function t2(){

alert(age);

}

}

var tmp=t1();

在大部分的语言中,t1被调用执行,则申请内存并把其局部变量,push入栈!t1函数执行完毕,内部的局部变量,随着函数的退出而销毁,因此age=20的局部变量也将消失。

但是在js中,age=20这个变量,却被t2捕捉,即使t1执行完毕,通过t2


var age=99;

tmp();//20

这种情况---返回的函数,并非孤立的函数,甚至把其周围的环境变量,形成了一个封闭的环境包,共同返回,所以叫做闭包

看下面的例子:

function closure(){

var sister='大桃花';

var mysister=function(){

return sister;

}

return mysister;//这个函数出生时,有一个叫大桃花的姐姐

}


function place(){

var sister='大福晋';

var mysister=closure():

alert(mysister());

}

place();//大桃花

使用闭包做一个全局的计数器


var cnt=(function(){

var cnt=0;

return function(){

return ++cnt;

}

})();//表示cnt为一个立即执行的函数

alert(cnt());

alert(cnt());


/*

在工作中,一般如何避免全局污染或冲突

1.统一放在一个全局对象上,如JQUERY->$

2.每人用自己的命名空间

var chen={}

chen.cnt=(function(){

var cnt=0;

return function(){

return ++cnt;

}

})();

*/

还有比较有意思的一个现象

for(var i=0,lis=document.getElementsByTagName('li'),len=lis.length;i<len;i++){

lis[i].οnclick=function(){

alert(i);

}

}


<ul>

<li></li>

<li></li>

<li></li>

<li></li>

</ul>

值都为4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值