这里面我知道结果输出得是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)
}
1 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
我是闲来无聊,也不知道题主看了别人的回答是不是已经明白了。
1.for循环执行了四次,所以循环体的代码实际上被运行四次,所以是打印四次。
2.setTimeout(code,ms)指在ms毫秒后执行code代码。这里是一秒,在一秒内for 循环肯定是运行完了,此时i已经被赋值为5,当刚好一秒的时候运行code代码,这里打印变量i,所以打印的结果是5。
综上,打印4个5。
添加回答
举报
0/150
提交
取消