关于闭包的 var
- function createFunctions(){var result = new Array();
- for (var i=0; i < 10; i++){
- result[i] = function(){
- return i;
- };
- }
- return result;
- }
- ClosureExample01.htm
这个函数会返回一个函数数组表面上看, 似乎每个函数都应该返自己的索引值, 即位置 0 的函数
返回 0, 位置 1 的函数返回 1, 以此类推但实际上, 每个函数都返回 10 因为每个函数的作用域链中
都保存着 createFunctions() 函数的活动对象, 所以它们引用的都是同一个变量 i 当
createFunctions() 函数返回后, 变量 i 的值是 10, 此时每个函数都引用着保存变量 i 的同一个变量
对象, 所以在每个函数内部 i 的值都是 10 但是, 我们可以通过创建另一个匿名函数强制让闭包的行为
符合预期, 如下所示
来源: http://www.qdfuns.com/article/33603/eff9f3f316e4401399245e998552daac.html