首页 >社区问答列表 >JavaScript关于返回函数数组的值的问题

JavaScript关于返回函数数组的值的问题

在学习js的闭包问题的时候,js高级程序设计上的代码例子,我敲了实验了下结果并不相符,想不明白。

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

这个代码结果应该返回的是一个数组,每个值都是10,可是在浏览器中实验后,我发现返回的是一个函数数组。

求解为什么不是返回一个数值数组?

  • 仅有的幸福
  • 仅有的幸福    2017-05-19 10:32:053楼

    是一个函数数组,每个函数虽然都有返回值 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]

    +0添加回复

  • 回复
  • 漂亮男人
  • 漂亮男人    2017-05-19 10:32:052楼

    因为你只是把函数赋给数组元素,并没有调用这些函数。

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

    +0添加回复

  • 回复
  • 小皮
  • 小皮    2017-05-19 10:32:051楼

    result 作为数组,其元素是函数。

    所以就会有你这个情况

    如果想要得到你想要的全部是 10 ,只需要遍历这个数组并调用作为数组元素的函数,把返回值 log 出来

    createFunction().forEach(fn => console.log(fn())); 

    +0添加回复

  • 回复