- 解释为什么如下代码会打印6个6
let i=0
for(i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
因为setTimeout()是过一会执行,当for循环结束后,setTimeout才执行;for循环结束后i=6所以setTimeout打印出6
- 写出让上面代码打印0、1、2、3、4、5的方法
for(let i=0;i<6;i++){
setTimeout(()=>{
console.log(i)
},0)
}
for 和let 配合有奇效
- 除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5
let i=0
for(i=0;i<6;i++){
setTimeout(function(){
console.log(i)
}(),0)
}
let i=0
for(i=0;i<6;i++){
!function(j){
setTimeout(()=>{console.log(j)},0)
}(i)
}
let i
for(i = 0; i<6; i++){
const x = i
setTimeout(()=>{
console.log(x)
})
}
这样也可以打印出0、1、2、3、4、5
- setTimeout()的'过一会'执行究竟是多久呢?
setTimeout(fn,0)的含义是,指定某个任务在主线程最早可得的空闲时间执行,意思就是不用再等多少秒了,只要主线程执行栈内的同步任务全部执行完成,栈为空就马上执行。也就是当同步任务的函数和语句执行完后,0秒或者立刻执行setTimeout(fn,0)。