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

时间:2018-12-28 17:49:49

标签: javascript settimeout

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

let i = 0;

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

2 个答案:

答案 0 :(得分:1)

这是因为setTimeout()函数。即使延迟了0秒。这将降低其在处理器中的优先级。 setTimeout函数中的所有5个动作将在while循环之后运行。由于它的末尾是5。所以它记录并在此之后递增...

答案 1 :(得分:0)

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