JS 函数的执行时机不同,得出的结果也不同。
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
以上代码打印出的结果是: 6 次 6
这段代码,是在一段时间后打印出 i 的值。setTimeout 的机制是当其他的代码执行完以后它再执行,我个人理解是当当前环境稳定以后,setTimeout 就会执行。
因此,setTimeout 是会在 for 循环执行完以后才会执行,因为 i 的初始值是0,因此 for 循环会一直运行,直到 i = 6,所以当 for 循环执行完以后,setTimeout 也开始执行,就会打印出 i 的当前值 6。因为 for 循环执行了 6 次,所以打印了 6 次。
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
以上代码打印的结果是: 0,1,2,3,4,5
以上代码和第一段代码不同之处在于 let i = 0 是写在了 for 循环里面。这样的话,每次 for 循环执行一次,就会创建一个 i ,第一段代码的 i 值只有一个,但是这段代码的 i 值有多个,所以每循环一次,就会打印出一次 i 的值,然后 i 再继续参与循环,当 i = 6 的时候,循环终止,就不会再打印了,所以打印的值是: 0,1,2,3,4,5