|
所谓闭包,是指访问和写入局部作用域的机制。
说到底,是对局部作用域的访问,(给子过程保存现场),类似于delphi中的property
****什么情况下需要闭包,我认为只有在异步调用子逻辑时,才有用****
1.访问[没什么卵用,在上层声明变量不香吗?]
(function(){
var b=0;
return function() {return b++}
//return function() {return b}
})()
上面返回了一个函数,访问不了b,但可以操作b
2.写入
(function(x){
var b=x;
return function() {return b++}
//return function() {return b}
})(5)
上面返回了一个函数,并且初始化了局部作用域
“写入” 实例:*下面两段代码,随便打开一个网页,F12在console中运行* 看效果
var eles=document.getElementsByTagName("A")
for (var i=0;i<eles.length;i++){
var el=eles[i]
setTimeout(function(){el.textContent=i},1000) //异步
}
结果:只修改了最后一个A元素;因为:el将会永远指向最后一个A
使用闭包解决:
var eles=document.getElementsByTagName("A")
for (var i=0;i<eles.length;i++){
var el=eles[i]
setTimeout(
(function(e,n){
var el=e,N=n //保存现场
return function(){el.textContent=N}
})(el,i)
,1000) //异步
}
|
|