关于js for循环中的setTimeout()一个问题

这里面我知道结果输出得是5,可是为什么是4个5,js是单线程的,setTimeout()执行时for循环已经执行完毕,i++成为5,setTimeout()根据作用域链查找,输出i的结果是5,可是为什么是4个5,for循环不是已经执行完毕了吗?怎么会输出4个5。不太懂,麻烦大家解答一下,谢谢!

for (var i = 1; i <= 4; i++) {
            setTimeout(function () {
                console.log(i); 
            }, 1000)
        }


芜湖不芜
浏览 798回答 1
1回答

慕标5832272

我是闲来无聊,也不知道题主看了别人的回答是不是已经明白了。1.for循环执行了四次,所以循环体的代码实际上被运行四次,所以是打印四次。2.setTimeout(code,ms)指在ms毫秒后执行code代码。这里是一秒,在一秒内for 循环肯定是运行完了,此时i已经被赋值为5,当刚好一秒的时候运行code代码,这里打印变量i,所以打印的结果是5。综上,打印4个5。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript