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

一道JS题目

一道JS题目

小怪兽爱吃肉 2018-09-10 09:27:15
for (var i=1;i<=5;i++) {                 setTimeout(function(){                    console.log(i)                 },i*1000)             }for循环语句是如何运行的呢?为什么会输出5个6呢?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

闭包,闭包,闭包的问题!

通过上面的代码,可以看出只定义了一个变量 i ,只有在循环里面赋值为1~5,循环结束后是 6
setTimeout中的代码是在循环之后执行的,所以输出的i是 6。而不是你所想的。
因为 i 只有一个,不可能同时等于 1,2,3,4,5.

可以改成(建议先理解上面一段代码,先不要纠结ES6的):

for (var i=1;i<=5;i++) {
    (function(){        var j = i;
        setTimeout(function(){console.log(j)},
                    j*1000);
    })();    
} 
\\ 或 ES6for (let i=1;i<=5;i++) {
    setTimeout(()=>console.log(i),i*1000);
}


查看完整回答
反对 回复 2018-10-18
  • 1 回答
  • 0 关注
  • 510 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

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

帮助反馈 APP下载

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

公众号

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