先看一下这段代码
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
由于定时器的存在,所以此段程序的运行结果是打印出6个6,而不是0,1,2,3,4,5
而出现这种情况就是JS函数的执行时机造成的
由于定时器的作用是等待一段时间再执行定时器内的语句
而在等待的这段时间内,循环变量i已经变成了6,此时再一个接一个的执行打印操作。
如何让上面这段代码打出0,1,2,3,4,5
- 用以下代码即可实现
let i = 0
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
- 将定时器的调用和定义分开(因为每次调用定时器函数都必须把函数执行完才能进行下一次循环)
function timer(i) {
setTimeout(console.log(i),0);
}
for (var i=0; i<6;i++) {
timer(i);
}