以下代码来自专业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; };'。您正将一个*函数*分配给数组中的第i个位置。这就是为什么你得到一个*函数*的数组。你为什么对此感到惊讶? – 2014-10-09 16:39:45
你有一个函数数组,如果你想让它们执行,你需要执行它们。我想你的意思是你想要在将它们添加到数组中时执行它们,所以你需要添加'()',尽管它可能会或可能不会达到你所期望的。此外,'var result = [];'更具规范性。 – 2014-10-09 16:39:58