JavaScript函数的执行时机
@ EatFog · Sunday, Jul 5, 2020 · 1 分钟阅读 · 更新于 Jul 5, 2020

本次我们对JS 函数的执行时机的学习,从一段代码开始

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

在这段代码中,循环体有一个setTimeout的延时,它会让console.log延时执行。当循环结束,i=6的时候,六个console.log才会执行,所以就会产生6个6。
那么如何在有延时的情况下 ,让for循环和没有延时一样呢?接下来就是无敌的let入场了!

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

let在for循环中,每次循环在执行时会保存一个i在循环体中,这样就避免了因为setTimeout而导致的问题。
那么在没有let的情况下,能否解决这个问题呢?答案是可以的,我们可以利用setTimeout的第三个参数来解决

for (var i=0; i<6; ++i) {
	setTimeout(function(a){
		console.log(a)
	}, 0, i)
}

自我介绍

Hi!我是蒋俊杰

你也可以叫我EatFog

这是我的第一个blog

社交链接