【发布时间】:2014-10-09 16:34:41
【问题描述】:
在以下来自 Professional JavaScript for Web Developers 的代码中,作者说我们应该得到一个长度为 10 的数组,每个位置的值都是 10。但是,我得到了一组函数——而不是值。这是为什么?
function createFunctions(){
var result = new Array();
for (var i = 0; i < 10; i++){
result[i] = function(){
return i;
};
}
return result; //
}
console.log(createFunctions());
这是我的控制台读数:
[function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}, function (){return i;}]
编辑:我尝试使用以下代码修复它,但我仍然得到相同的控制台读数:
function createFunctions(){
var result = new Array();
for (var i=0; i < 10; i++){
result[i] = function(num){
return function(){
return num;
};
}(i); //
}
return result;
}
console.log(createFunctions());
【问题讨论】:
-
看看这一行:
result[i] = function(){ return i; };。您正在将 function 分配给数组中的ith 位置。这就是为什么你会得到一个 function 数组。你为什么对此感到惊讶? -
你有一个函数数组,如果你想让它们执行,你需要执行它们。我认为您的意思是您希望在将它们添加到数组时执行它们,因此您需要添加
(),尽管它可能会或可能不会达到您的预期。此外,var result = [];更规范。
标签: javascript arrays closures