示例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