JS 函数的执行时机

98 阅读1分钟

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