Heim > Fragen und Antworten > Hauptteil
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?
仅有的幸福2017-05-19 10:32:05
是一个函数数组,每个函数虽然都有返回值 i ,不过这个函数并没有执行。
你仔细看书的 181 页,代码下面第一句话。
这个函数会返回一个函数数组。
之前我看到这儿的时候也有一点疑惑,感觉应该直接全部返回 10 才更直观。后来想了想,如果直接在返回的函数后面加()执行的话,就相当于每次都创建一个立即执行函数,返回的 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]
漂亮男人2017-05-19 10:32:05
因为你只是把函数赋给数组元素,并没有调用这些函数。
function createFunction(){
var result = new Array();
for (var i = 0; i < 10; i++) {
result[i] = (function(){
return i;
})();
}
return result;
}
PHP中文网2017-05-19 10:32:05
result 作为数组,其元素是函数。
所以就会有你这个情况
如果想要得到你想要的全部是 10
,只需要遍历这个数组并调用作为数组元素的函数,把返回值 log 出来
createFunction().forEach(fn => console.log(fn()));