将返回值推送到JavaScript中的数组中

时间:2014-04-04 19:15:02

标签: javascript

我在循环中有一个函数,它在每次迭代中改变了它的返回值,我想在函数中保存函数的所有返回值。

此代码有什么问题:

function riddle() {
    var a = [];
    for (var i = 0; i < 10; i++) {
        a.push(function() {
            return i * i;
        });
    }
    return a;}

// code to test your solution: 

var a = riddle();
var b = [];
for (var i = 0; i < a.length; i++) { b.push(a[i]()); }
console.log(b);

应该打印的内容:

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

但我得到了这个:

[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]

1 个答案:

答案 0 :(得分:6)

  

这段代码出了什么问题?

变量i被提升到函数riddle中的范围顶部。数组中生成的匿名函数确实关闭了局部变量i。但i的最后一个值是10,所以它们都返回100。

顺便说一句,这段代码将为内部函数创建一个真正的局部变量,并按照您的意图执行。

a.push((
    function(tmp) {
        return function() {
            return tmp*tmp;
        };
})(i));