为什么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
循环)。
- 由于
i
在 while
循环结束时位于 5
,setTimeout
函数将从那里获取它,输出它的值并将它递增 1在随后的每个 console.log()
我在面试时有一个问题。我只是不明白为什么会打印 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
循环)。- 由于
i
在while
循环结束时位于5
,setTimeout
函数将从那里获取它,输出它的值并将它递增 1在随后的每个console.log()