以下代碼來自專業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