JS 函数的执行时机

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

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

因为JS是单线程运行的。
setTimeout语句在循环结束时才会执行,循环结束时i已经变成了6,所以会打印出6个6

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

  1. 使用 for let 配合
for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  1. 利用函数作用域
let i = 0
for(i = 0; i < 6; i++ ){
        (function (j) {
            setTimeout(function () {
                console.log(j);
            }, 0);
        })(i);
}

你可能感兴趣的:(JS 函数的执行时机)