JS函数的执行时机

153 阅读1分钟

1.为什么如下代码会打出6个6

1.1代码

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

1.2原因

  1. 因为JS是单线程的,单线程意味着所有的任务都需要排队。前一个任务结束,才会执行后一个任务。
  2. 该代码执行完for循环过一会再执行console.log(i),但是i执行完的时候已经变成6了,并且不变了,所以过一会打印出来的全是6

2.写出让上面代码打印出0,1,2,3,4,5的方法

2.1代码

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

2.2结果

image.png

3.用forEach打印0,1,2,3,4,5

3.1代码

let arr = [0,1,2,3,4,5]
arr.forEach(item=>console.log(item))

3.2结果

image.png