JS 函数的执行时机

671 阅读1分钟

理解函数的调用时机是弄清楚函数的关键。

首先看一段代码

let a =1
function fn(){
    console.log(a)
}

这段代码可以打印出什么?不知道,因为没有被调用。

下面这段代码可以打印出什么?

let a =1 
functon fn(){
    console.log(a)
}
fn()

打印出1,因为函数被调用了。

当函数内部出现setTimeout(()=>{},0),需要等待a赋值2的任务执行完之后才执行,所以打印出的是2。

let a = 1
function fn(){
    setTimeout(()=>{
        console.log(a)
    },0)
}
fn()
a = 2

for循环里出现setTimeout(()=>{},0),需要先执行for 循环,然后再执行setTimeout。

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

因为for循环执行完成之后,i的值为6,而在等待i变成了6次6之后,再要求打印,所以打印出的是6个6。

如果想要得到结果为0、1、2、3、4、5,可以let在for循环里面,这样js在for和let一起用的时候,每次循环会多创建一个i。

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