JS 函数的执行时机

110 阅读1分钟

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

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

JS会将当前代码执行完,再做延迟操作,比如这段代码,会等循环执行完再去执行console.log(i),循环结束时i的值为6,所以会打印6个6

如何让上面代码打印 0、1、2、3、4、5 呢

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

这样就能让代码打印0、1、2、3、4、5,因为JS和let一起用的时候会加东西,每次循环会多创建一个i

除了使用 for let 配合,还有什么其他方法可以打印出 0、1、2、3、4、5

可以利用setTimeout第三个参数把i传进去

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

使用立即执行函数

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