这是《JavaScript高级程序设计》181页一个闭包的例子:
function createFunctions(){
var result = new Array();
for(var i = 0; i < 10; i++){
result[i] = function(){
return i;
}
}
return result;
}
结果并不是每个函数都返回自己的索引值,而是每个函数都返回10,这是为什么?
其中书中这段代码上方一段文字种有这么一句话:
别忘了闭包所保存的是整个变量对象,而不是某个特殊变量。
请问这句话又是什么意思?谢谢各位
i
变量只有一个,保存在作用域链中没有被销毁(因为闭包还在使用),所以,results[i]
中每一个函数中的i
变量始终都指向同一个变量。所以在for
循环以后,i
变量就变成了10
,当执行闭包的时候,每一个函数去作用域链上找i
变量,得到的结果就是10