JavaScript 函数的执行时机

247 阅读1分钟

关于JavaScript函数调用的典型例子

  • 例一

问打印出什么?

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

答案:无结果,因为没有函数调用

  • 例二 问打印出什么?
let a=1
function fn(){
    console.log(a)
}
fn()

答案:打印出1

  • 例三

问打印出什么?

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

答案:打印出2
先执行a=1,再执行a=2,打印出2

  • 例四

问打印出什么?

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

答案:打印出1
函数的调用时机,先执行a=1,再执行fn()

  • 例五

问打印出什么?

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

答案是 2
setTimeout表示尽快去打印,先把代码执行完,先让a=2,然后再 打印,console.log(a)a打印的时机是在a=2之后的。

  • 例六

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

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

解释: 因为setTimeout函数表示尽快执行后面的console.log(i)

所以会先执行完for 循环 ,再打印结果,而for循环执行完后结果是 6

i<6,i++所以打印6次,结果就是6个6,主要是和Javascript函数的调用机制有关。

如何打印出0,1,2,3,4,5呢?

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

把 let i放在函数里面就可以实现打印结果是0,1,2,3,4,5了 因为Js在for和let一起用的时候会加东西,每次循环多一个i