js函数的执行时机

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

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

因为在js中有个事件循环机制,最简单的理解就是会先处理同步任务,再处理异步任务,在这段代码中,定时器是异步的,当for循环执行后,i变成了6,才会执行定时器,所以才会打印出6个6

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

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

因为es6中的let存在块级作用域

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5

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

采用立即执行函数,把定时器包裹起来,第一次for循环,就把当前的i当作参数传递给立即执行函数并将结果分别保存起来,第二次for循环,通过定时器打印出来

原文地址:https://www.cnblogs.com/silent-cat/p/14053549.html