为了账号安全,请及时绑定邮箱和手机立即绑定

关于一段JS代码的问题

关于一段JS代码的问题

慕丝7291255 2019-03-08 19:11:39
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] ]
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

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


查看完整回答
反对 回复 2019-03-12
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

没毛病
result就是这样的

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


查看完整回答
反对 回复 2019-03-12
?
FFIVE

TA贡献1797条经验 获得超6个赞

看一个函数,首先关注的是函数的参数和返回值。

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);


查看完整回答
反对 回复 2019-03-12
  • 3 回答
  • 0 关注
  • 568 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信