示例1:http://jsfiddle.net/ufCr8/封閉混亂的Javascript
function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function() {
return i;
}();
}
return result;
}
var funcs = createFunctions();
for (var i = 0; i < funcs.length; i++) {
document.write(funcs[i] + "<br />");
}
示例2:http://jsfiddle.net/T5shB/
function createFunctions() {
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function(num) {
return function() {
return num;
};
}(i);
}
return result;
}
var funcs = createFunctions();
for (var i = 0; i < funcs.length; i++) {
document.write(funcs[i]() + "<br />");
}
爲什麼這兩個得到不同的結果?
他們對我來說有相同的結果。 – icktoofay 2011-04-02 03:37:02
是的,對我來說也是一樣的結果。你在使用一個奇怪的瀏覽器嗎? – 2011-04-02 03:42:57
我也得到了同樣的結果。請注意,這些函數全部在for循環中執行,因此分配給'result [i]'的值被「凍結」。如果你想在for循環外部移除'()'並運行'result [i]()',你會看到一個'9'列表被打印出來。 – monsur 2011-04-02 03:43:42