下面代码为何会打印出6个6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
JavaScript是一个单线程的解释器,所以在一段时间内只能执行一段代码,但是setTimeout过一段时间执行里面的代码,也就是等到其他非延迟语句执行完了,才能够轮到setTimeout执行。上面的代码中,即使setTimeout设置的时间为0,也要等待一段时间,执行完了for语句的循环,也就是最后一次i=6时候,不符合循环的条件判断,setTimeout的里面输出语句就被执行6次,也就输出了6个6。
如何使得上面代码打印出0、1、2、3、4、5的方法
当然,为了更好理解js的 setTimeout,稍加改变,用下面方法就可以输出0-5。
for( let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5.
因为setTimeout是等待一段时间,当非延迟代码执行完了,就执行setTimeout,只要将for循环放入setTimeout中,外面没有非延迟代码,就只能执行里面的代码了。此时输出的就是0到5了。
let i = 0;
setTimeout(()=>{
for (i=0;i<6;i++){
console.log(i);
}
},0)