【发布时间】:2011-07-30 14:28:28
【问题描述】:
我知道人们对闭包的一个问题是它返回给定变量的最新值,除非你这样做:
function f() {
var a = [];
var i;
for (i = 0; i < 3; i++) {
a[i] = (function (x) {
return function () {
return x;
}
})(i);
}
return a;
}
}
那里发生的事情太多了,我需要解释一下。
【问题讨论】:
-
请具体说明您的问题。你现在应该已经知道了。
-
您添加的
}似乎太多了。 -
查看这个问题以获得关于闭包如何在 javascript stackoverflow.com/questions/111102/… 中工作的一个很好的解释
-
@Blankman:如果将 IIFE
(function (x) { return func... })(i);替换为在循环中调用的 named 函数,您可能会发现更容易理解:for(i=0...){some_func(i);}。然后some_func将接收i,定义为参数x,并返回一个引用x的函数。function some_func( x ) { return function(){ return x; }; }
标签: javascript closures