JS 函数的执行时机

256 阅读1分钟
  • setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式;其意思就是尽快,而不是马上。
  • JS函数的调用时机不同,得到的结果不同。

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

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

因为setTimeout方法是尽快的意思,每一次for循环的时候,setTimeout都执行一次,但是里面的函数没有被执行,而是被放到了任务队列里面,等待执行,等for循环了6次,就放了6次,当i大于6时,主线程执行完成,才进入任务队列里面执行。这时候因为for循环i=6了,所以输出的全部都是6。

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

只需将let i =0,放入for循环

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

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

①闭包

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((value)=>{
      console.log(value)
    },0,i)
}

③利用 const 关键字

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