JS 函数的执行时机

104 阅读1分钟
let i = 0
for(i = 0; i<6; i++){
  setTimeout(()=>{
    console.log(i)
  },0)
}

setTimeout会使得代码在循环完成后执行,因此console.log在循环完成后再执行,会打印6次6。

若需要打印0、1、2、3、4、5可将上述代码去掉setTimeout:

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

或者将let i = 0 放置入for循环中

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

上述代码能打印出0、1、2、3、4、5的原因是:for和let一起用的时候,每次循环会多创建一个i,最后打印时会将所有i都打印出来。

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

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