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