let和for代码块区别
Yogae 健身狂魔
let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
} // 6 6 6 6 6 6

结果:同时输出6个6

setTimeout是异步执行,也即每一次for循环执行一次,setTimeout执行一次,但里面的setTimeout并没有立即被执行,而是等到for循环结束,再执行。

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
} // 0 1 2 3 4 5

结果:同时输出0 1 2 3 4 5

let声明的 i,运行环境中 i 的值是每一个循环创建匿名函数时候的 i

因为let声明只在代码块中有效