方法#1Javascript關閉?
function transform(ar) {
var alStr = [];
for(var i=0; i<ar.length; i++) {
alStr[i] = (function(v) {
return (function() {
return v;
});
}(ar[i]));
}
return alStr;
}
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
a[1];
b[1]();
方法#2
function transform(ar) {
var alStr = [];
for(var a in ar) {
var O = function() {
return a;
}
alStr.push(O);
}
return alStr;
}
var a = ["a", 24, { foo: "bar" }];
var b = transform(a);
a[1];
b[1]();
上述的方法用於轉化對象的數組成單獨的功能,這在執行返回特定陣列對象。想知道爲什麼方法#1工作和方法#2沒有。
** **唯一的新功能引入新的變量。這個問題已經來臨在SO上好一點。搜索「JavaScript循環最後值」或類似的。 – 2012-08-06 01:12:32
看到[這個答案](http://stackoverflow.com/a/3903130/373378)一個很好的解釋。 – 2012-08-06 01:16:39
在你的非工作代碼中,把'var a' *放在'for'循環之前,它會更好地反映現實。沒有變量是'for'語句的局部變量,因爲在JavaScript中,範圍總是由'function'定義的。這意味着'for'循環中所有正在創建的函數都指向''''變量,它是'transform'函數的本地變量。 – 2012-08-06 01:21:48