为什么while循环中的setTimeout是按顺序递增的?

Why does setTimeout in a while loop increment in order?

我在面试时有一个问题。我只是不明白为什么会打印 5 6 7 8 9...

let i = 0;

while (i < 5) {
  setTimeout(() => {
    console.log(i++);
  }, 0);
  i++;
}

是因为setTimeout()函数的缘故。即使它延迟 0 秒。这将降低它在处理器中的优先级。 setTimeout 函数中的所有 5 个动作将在 while 循环后 运行。因为最后我是 5。所以它在那之后记录和递增...

  • 您的代码以 i = 0 开头。
  • 进入while循环时,会递增到1, 2, 3, 4,到达5时停止。
  • setTimeout 函数是异步的,因此即使延迟为 0,它也会在当前线程完成后调用(while 循环)。
  • 由于 iwhile 循环结束时位于 5setTimeout 函数将从那里获取它,输出它的值并将它递增 1在随后的每个 console.log()