1 解释为什么如下代码会打印 6 个 6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 变量i在for循环中执行i++.
- 最后一次i++ ,i=6,for循环不满足条件退出循环.
- JS是单线程执行任务,先执行同步任务,碰到异步任务会挂在异步线程中等待触发
- 异步线程中的任务被触发,进入到消息队列.
- JS执行完同步任务,会到消息队里中取出异步任务执行.
- 一共执行6次
console.log(i)
,在i=6时,打印6次6.
2 打印 0、1、2、3、4、5 的方法
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 因为let和for一起用的时候JS做了优化,每次循环会多创建一个i.
3 除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5
for (var i = 0; i < 6; i++) {
(function f(i) {
setTimeout(() => {
console.log(i);
}, 0);
})(i);
}