您的位置:首页 > Web前端 > JavaScript

JS中的闭包

2015-04-22 10:13 78 查看
var result=[];
function foo(){
var i= 0;
for (;i<3;i=i+1){
result[i]=function(){
alert(i)
}
}
};
foo();
result[0](); // 3
result[1](); // 3
result[2](); // 3
为什么都是3 因为闭包中所记录的自由变量,只是对这个变量的一个引用,而非变量的值,当这个变量被改变了,闭包里获取到的变量值,也会被改变.
解决办法之一是让内部函数在循环创建的时候立即执行,并且捕捉当前的索引值,然后记录在自己的一个本地变量里.然后利用返回函数的方法,重写内部函数,让下一次调用的时候,返回本地变量的值,
var result=[];function foo(){var i= 0;for (;i<3;i=i+1){result[i]=(function(j){return function(){alert(j);};})(i);}};foo();result[0](); // 0result[1](); // 1result[2](); // 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JS中的闭包