JS 函数的执行时机

103 阅读1分钟

1、解释为什么如下代码会打印 6 个 6

let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

先声明一个i = 0 ,只有一个i

然后setTimeout(()=>{console.log(i)},0)意味着“过一会儿再执行console.log(i)”

就在这“过一会”后,i已经循环加到了6,所以循环6次console.log(i)只能打印出6个6。

2、 写出让上面代码打印出0~5的方法

只要把let i = 0放进参数里即可

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

for和let一起用时,每循环一次JS都会把i复制一次,也就是第一个i=0保留,复制出的i进入循环变成i=1,如此重复一直到i=6时不再进入循环,此时 i有0,1,2,3,4,5可以被打印出来。