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

以上代码运行后会打印出 6 个 6

1
2
3
4
5
6
6
6
6
6
6
6

打印出 6 个 6 的原因是 setTimeout 在做完后面的事情(迭代 i)才执行,此时 i 就是 6

如果要使用 forsetTimeout 打印出 0~5,必须和 let 一起用,在函数内声明 i。此时每次循环都会生成新的 i

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
for (let i = 0; i < 6; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}
for (let i = 0; i < 6; i++) {
  setTimeout(() => {
    console.log(i);
  }, 0);
}
/*
0
1
2
3
4
5
*/