为什么在版本 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);
}
最佳答案
第一个代码片段生成了 3 个绑定(bind)到 i
的函数。
第二个代码片段生成了 3 个围绕 i
的值关闭的函数 - 一个闭包。
这意味着在第一个示例中,如果您这样做:
i = "hi";
f[0](); // "hi"
次要的:
f
可能应该初始化为 f = []
因为您将它用作数组。
关于javascript - 为什么在版本 B 中运行 f[1]() 与在下面的版本 A 中不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18056508/