1 循环体里的setTimeout
let i = 0
for(i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
// 打印结果: 6 6 6 6 6 6
浏览器会在执行完当前任务队列中的任务,再执行setTimeout队列中积累的任务 变量i从5变为6以后,不满足循环条件,程序执行setTimeout队列中积累的任务,所以打印结果全部是6
2 let 与 循环的配合使用
for(let i = 0; i<6; i++){
setTimeout(()=>{
console.log(i)
},0)
}
// 打印结果 0 1 2 3 4 5
JS 在 for 和 let 一起用的时候,每次循环会多创建一个 i,保存循环是i的值,传入setTimeout的回调函数
3 循环体内 setTimeout 的另一种应对
let i;
function father(index){
setTimeout(()=>{
console.log(index)
},0)
}
for(i = 0; i<6; i++){
father(i);
}
// 打印结果 0 1 2 3 4 5