1

为什么在下面的版本 B 中运行 f1 与在版本 A 中不同?
// 版本 A

var f = {};
for( var i=0 ; i<3 ; i++ ) {
f[i] = function() { alert(i); }
}

// 版本 B

var f = {};
for( var i=0 ; i<3 ; i++ ) {
f[i] = function(j) { return function() { alert(j); }; }(i);
}
4

2 回答 2

4

第一个代码片段生成了 3 个绑定到i.

第二个代码片段生成了 3 个围绕-a闭包的值关闭的函数。i

这意味着在第一个示例中,如果您这样做:

i = "hi";
f[0](); // "hi"

次要的:

f可能应该初始化,f = []因为您将它用作数组。

于 2013-08-05T11:01:12.787 回答
0

这是因为一个称为闭包的概念,其中返回函数的函数的参数值保存在返回的函数中

于 2013-08-05T11:05:41.867 回答