JS函数执行的时机(setTimeout )

197 阅读1分钟
  • 函数执行时机
  • 打印6个6
  • 打印 0,1,2,3,4,5

函数执行时机

let a = 1
function fn(){
    console.log(a)
}
//不知道打印了什么,因为没有调用函数fn
let a = 1
function fn(){
    console.log(a)
}
fn()
a = 2
//打印出1,因为先调用函数fn()后赋值a=2
let a = 1
function fn=(){
  setTimeout(()=>{
    console.log(a)
  },0)
}
fn()
a=2
//打印出2,因为setTimeout()会让函数尽快打印出a的值,即执行完当前任务后尽快打印

打印6个6

先看已下代码:

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

chrome运行结果如下:

为什么是输出6个6呢?

  • setTimeout函数

    MDN解释如下:

    setTimeout() 方法设置一个定时器,该定时器在定时器到期后执行一个函数或指定的一段代码。
    

    白话的理解: 会让函数尽快打印,即执行完当前任务后尽快执行。

如何输出0,1,2,3,4,5?

  • 方案一: 在for循环体内声明i

    for(let i = 0; i<6; i++){
    	setTimeout(() => {
    		console.log(i)
    	 }, 0)
    	}
    
  • 方案二: 先声明函数,然后在setTimeout()中调用。

let i = 0
 function fn() {
 console.log(i)
 }
 
 for(i = 0; i<6; i++){
 setTimeout(fn(), 0)
 }
  • 方案三: 使用立即执行函数。
let i = 0
for(i = 0; i<6; i++){
  (function(i){
  	setTimeout(() => {
  		console.log(i)
  	}, 0)
  })(i)
}