JS函数在使用的时候是有调用时机的,调用时机不一样,得到的结果也会不一样。除了常规的调用时机还有一种比较特别的情况,就是有setTimeout的情况。例:
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
执行这段代码会发现结果是打印了6个6
首先,setTimeout的意思是尽快执行,而不是马上执行。上面的代码执行的过程是当js在执行for循环的时候,并不会马上去执行console.log(i),而是等for循环结束后,才尽快执行console.log(i),这时候i的值为6,所以最终会打印出6。而在这个过程中for循环执行了6次,setTimeout也执行了6次,所以最后看到的结果是打印了6个6。
让上面代码打印 0、1、2、3、4、5 的方法
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
将 let 放进 for 循环中,就可以打印出 0、1、2、3、4、5