关于一段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] ]

阅读 1.9k
3 个回答

createFunction()返回一个数组,数组的元素都是匿名函数function

没毛病
result就是这样的

[function() {return i;}, function() {return i;}, function() {return i;}]

看一个函数,首先关注的是函数的参数和返回值。
createFunction()这个函数没有参数,return的是一个数组。

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

所以显示result这个数字的每一项,都是一个匿名函数,里面的匿名函数return i

如果你去尝试调用里面的任意一个匿名函数,你会痛苦的发现,return回来的结果都是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);

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题