JS 函数的执行时机

121 阅读1分钟

JS函数的调用时机不同,得到的结果不同。

setTimeout()方法用于在指定的毫秒数后调用函数或计算表达式;其意思就是尽快,而不是马上。

1.思考一下以下这块代码的打印结果是什么?

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

因为setTimeout指的是尽快执行,在六次for循环结束后再去执行,而此时的i已经是6了,所以会打印出6个6。

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

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

因为用let声明的i,所以在每个for循环中的i都会被单独存储起来。

3.其他的方法实现

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

参考链接