《JS 函数的执行时机》

115 阅读1分钟

函数的执行时机

以下结果会打印6个6,而不是0,1,2,3,4,5

原因:在这段代码中,先执行完for循环,在执行setTimeout()里面的代码,setTimeout()是等当前的事执行完之后才执行,执行完for循环时,i已经变成6了,所以就依次打印6个6。

let i = 0
for(i = 0; i<6; i++){
 setTimeout(()=>{        //setTimeout过设定时间才执行
   console.log(i)
 },0)
}
结果打印66

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

 for(let i = 0; i<6; i++){
  setTimeout(()=>{        //setTimeout过设定时间才执行
    console.log(i)
  },0)
 }

其他的方法打印 0、1、2、3、4、5

function num(){
    var i = 0
    var t = setInterval(function(){
        console.log(i)
        i++
        if(i>5){
            clearInterval(t)
         }
      },0)
 }
 num()

JS 函数的调用时机

调用时机不同,结果就不同。举一下几个例子来看:

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

let a = 1
function fn(){
    console.log(a)
}
fn()
a = 2
结果打印1

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