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

关于js立即执行函数的问题

关于js立即执行函数的问题

GCT1015 2019-02-25 12:47:45
代码如下,已知结果是立即输出0,1,2,3,4,看解释说是输入的i是undefined;但是在for循环内部不是应该可以取到i的值吗?我想知道为什么会是立即输出0,1,2,3,4,而不是每隔1秒输出一个数字。恳请大腿解释一下。。。for (var i = 0; i < 5; i++) {  setTimeout((function(i) {    console.log(i);  })(i), i * 1000);}
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

(function(i) {

    console.log(i);

})(i)

这个函数执行完会返回一个undefined(因为没有return的值),所以你的代码相当于


for (var i = 0; i < 5; i++) {

    console.log(i);

    setTimeout(undefined, i * 1000);

}

如果想按顺序每隔1秒输出一个数字,应该写成下面那样


for (var i = 0; i < 5; i++) {

    setTimeout((function(i) {

        // 立即执行函数返回一个函数给定时器

        return function() {

            console.log(i);

        }

    })(i), i * 1000);

}


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

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号