Als ich das Abschlussproblem von js lernte, habe ich die Codebeispiele für die fortgeschrittene js-Programmierung getippt und damit experimentiert, aber die Ergebnisse waren nicht konsistent und ich konnte es nicht herausfinden.
function createFunction(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function(){
// console.log(i);
return i;
};
}
return result;
}
Das Ergebnis dieses Codes sollte ein Array sein, jeder Wert ist 10, aber nach Experimenten im Browser habe ich herausgefunden, dass es sich bei dem, was zurückgegeben wird, um ein Array von Funktionen handelt.
Warum wird kein numerisches Array zurückgegeben?
是一個(gè)函數(shù)數(shù)組,每個(gè)函數(shù)雖然都有返回值 i ,不過(guò)這個(gè)函數(shù)并沒(méi)有執(zhí)行。
你仔細(xì)看書(shū)的 181 頁(yè),代碼下面第一句話。
這個(gè)函數(shù)會(huì)返回一個(gè)函數(shù)數(shù)組。
之前我看到這兒的時(shí)候也有一點(diǎn)疑惑,感覺(jué)應(yīng)該直接全部返回 10 才更直觀。后來(lái)想了想,如果直接在返回的函數(shù)后面加()執(zhí)行的話,就相當(dāng)于每次都創(chuàng)建一個(gè)立即執(zhí)行函數(shù),返回的 i 就是每次正常的索引值,起不到該有的效果。
function createFunction(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = function(){
return i;
}();
}
return result;
}
createFunction() //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
因?yàn)槟阒皇前押瘮?shù)賦給數(shù)組元素,并沒(méi)有調(diào)用這些函數(shù)。
function createFunction(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = (function(){
return i;
})();
}
return result;
}
result 作為數(shù)組,其元素是函數(shù)。
所以就會(huì)有你這個(gè)情況
如果想要得到你想要的全部是 10
,只需要遍歷這個(gè)數(shù)組并調(diào)用作為數(shù)組元素的函數(shù),把返回值 log 出來(lái)
createFunction().forEach(fn => console.log(fn()));