猿问

关于一个闭包的例子

这是《JavaScript高级程序设计》181页一个闭包的例子:

function createFunctions(){    var result = new Array();    
    for(var i = 0; i < 10; i++){
        result[i] = function(){            return i;
        }
    }    return result;
}

结果并不是每个函数都返回自己的索引值,而是每个函数都返回10,这是为什么?

其中书中这段代码上方一段文字种有这么一句话:

别忘了闭包所保存的是整个变量对象,而不是某个特殊变量。

请问这句话又是什么意思?谢谢各位


慕后森
浏览 588回答 1
1回答

翻阅古今

i变量只有一个,保存在作用域链中没有被销毁(因为闭包还在使用),所以,results[i]中每一个函数中的i变量始终都指向同一个变量。所以在for循环以后,i变量就变成了10,当执行闭包的时候,每一个函数去作用域链上找i变量,得到的结果就是10
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答