前面几篇文章中提到过,作用域链以及闭包的概念,这里就不一一重复了, 作用域链的这种配置机制引出了一个值得注意副作用,既闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。 func ...
前面几篇文章中提到过,作用域链以及闭包的概念,这里就不一一重复了,
作用域链的这种配置机制引出了一个值得注意副作用,既闭包只能取得包含函数中任何变量的最后一个值。别忘了闭包所保存的是整个变量对象,而不是某个特殊的变量。
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = function(){
return i;
}
}
return result;
}
从上面的代码,这个函数会返回一个函数数组。表面上看,似乎每个函数都应该返回自己的索引值,既位置0的函数返回0,依次类推。但实例每个函数都会返回10.
因为每个函数的作用域链中都保存着 createFunctions() 函数的活动对象,所以它们引用的都是同一个变量i.
那怎么解决这个问题尼? 可以通过创建另一个匿名函数强制让闭包的行为符合预期,如下所示
function createFunctions(){
var result = new Array();
for(var i=0;i<10;i++){
result[i] = function(num){
return function(){
return num;
}
}(i);
}
return result;
}
代码修改为上面的时候,似乎符合我们的初衷了,
上面须要注意的是:
原标题:谈谈闭包中的
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。