一道JS题目

for (var i=1;i<=5;i++) {
                setTimeout(function(){                    console.log(i)
                },i*1000)
            }for循环语句是如何运行的呢?为什么会输出5个6呢?


小怪兽爱吃肉
浏览 511回答 1
1回答

慕慕森

闭包,闭包,闭包的问题!通过上面的代码,可以看出只定义了一个变量&nbsp;i&nbsp;,只有在循环里面赋值为1~5,循环结束后是&nbsp;6。而setTimeout中的代码是在循环之后执行的,所以输出的i是 6。而不是你所想的。因为 i 只有一个,不可能同时等于&nbsp;1,2,3,4,5.可以改成(建议先理解上面一段代码,先不要纠结ES6的):for&nbsp;(var&nbsp;i=1;i<=5;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;(function(){&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;j&nbsp;=&nbsp;i; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;setTimeout(function(){console.log(j)}, &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j*1000); &nbsp;&nbsp;&nbsp;&nbsp;})();&nbsp;&nbsp;&nbsp;&nbsp; }&nbsp; \\&nbsp;或&nbsp;ES6for&nbsp;(let&nbsp;i=1;i<=5;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;setTimeout(()=>console.log(i),i*1000); }
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript