经典题目:6个6
1. 为什么是6个6
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 上述代码会打印出6个6,因为setTimeout表示过一段时间打印,这是一个异步任务
- 浏览器此时会继续向下执行下面的代码,然后再来执行setTimeout函数里的操作
- 所以过段时间后for循环已经把i从0增加到了6,打印的结果是6个6
2. 如何打印出 0 1 2 3 4 5
for(let i=0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 此时的i定义到了for循环中,因为let变量的作用域只能在当前函数中,所以每次循环都会创建一个新的i
- i的值在setTimeout里输出的就是依次叠加的0、1、2、3、4、5
3. 不用for let 配合打印出 0 1 2 3 4 5
for (let i = 0; i < 6; i++) {
setTimeout((function(i){
return function() { console.log(i); }
}(i)),0)
}
Reference List
JavaScript教程-定时器: wangdoc.com/javascript/…
博客-JS函数的执行时机:blog.csdn.net/cainiao1412…
博客-JS函数的运行时机: juejin.cn/post/684490…