鍍金池/ 問答/HTML/ 關(guān)于一段JS代碼的問題

關(guān)于一段JS代碼的問題

function createFunction() {
    var result = new Array();
    for (var i = 0; i < 10; i++) {
        result[i] = function() {
            return i;
        };
    }
    return result;
}

console.log(createFunction());

如題上一段代碼為什么輸出的是
[ [Function],
[Function],
[Function],
[Function],
[Function],
[Function],
[Function],
[Function],
[Function],
[Function] ]

回答
編輯回答
尕筱澄

createFunction()返回一個數(shù)組,數(shù)組的元素都是匿名函數(shù)function

2017年3月17日 08:49
編輯回答
吢丕

沒毛病
result就是這樣的

[function() {return i;}, function() {return i;}, function() {return i;}]
2018年4月18日 00:10
編輯回答
懶豬

看一個函數(shù),首先關(guān)注的是函數(shù)的參數(shù)和返回值。
createFunction()這個函數(shù)沒有參數(shù),return的是一個數(shù)組。

result[0] = function(){}
result[1] = function(){}
result[2] = function(){}
.
.
.
result[9] = function(){}

所以顯示result這個數(shù)字的每一項,都是一個匿名函數(shù),里面的匿名函數(shù)return i

如果你去嘗試調(diào)用里面的任意一個匿名函數(shù),你會痛苦的發(fā)現(xiàn),return回來的結(jié)果都是10...

改成這樣,就是你想要的

function createFunction() {
    var result = new Array();
    for (var i = 0; i < 10; i++) {
        result[i] = (function() {
            return i;
        })(i)
    }
    return result;
}

var arr = createFunction();

console.log(arr);

或者用ES6的let

function createFunction() {
    var result = new Array();
    for (let i = 0; i < 10; i++) {
        result[i] = i
    }
    return result;
}

var arr = createFunction();

console.log(arr);

2017年3月20日 15:23