JS函数的执行时机

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

setTimeout

  • setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,其意思就是尽快
  • 尽快的含义是在结束当前正在进行的事件后立即开始下一个事件
let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

上面代码中

  • setTimeout的调用时间为'0'(尽快调用),只有当主代码执行完一遍后才会执行setTimeout,但这时i已经为6,所以打印出数值6。又因为条件:i<6,共执行了6次,所以结果为一共打印出6次6。

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

for循环和let配合

for(let i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}
  • JS 在 for 和 let 一起用的时候会加东西
  • 每次循环会多创建一个 i
    立即执行函数
let i 
for(i = 0; i<6; i++){
  !function(j){
      setTimeout(()=>{
        console.log(j)
      },0)
  }(i)
}

用setTimeout的第三个参数,将i传进去

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

用const

let i
for(i = 0; i<6; i++){
    const x = i
    setTimeout(()=>{
      console.log(x)
    })
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容