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

标签 javascript settimeout

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

let i = 0;

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

最佳答案

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

关于javascript - 为什么while循环中的setTimeout是按顺序递增的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53962409/

相关文章:

javascript - 多次将表单提交到新选项卡

javascript - 在扩展另一个之前折叠 Accordion 分支?

javascript - jQuery - 设置和重置转换延迟

javascript - 在函数上执行 setTimeout 时出现问题 - 将其作为参数传递

javascript - 影响事件类的延迟功能-一页滚动

javascript - jQuery:如何获取动态生成元素的ID?

javascript - 将选项值设置为数组

javascript - 如何停止表单提交并抛出错误jquery

JavaScript setTimeout 无法访问函数变量

javascript - 为什么 setTimeout 无法访问外部特定变量?