如何将循环中的迭代添加到事件队列中?



我一直在尝试理解以下一段代码:

for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
});
}

我知道为什么它会产生输出:

5
5
5
5
5

但只是想澄清我对 JavaScript 中事件循环如何工作的理解。

是否每次迭代都会在setTimeout运行之前在事件循环中创建一个事件?

我知道默认情况下,setTimeout函数使用0作为其milliseconds值,但它只保证将该方法添加到事件队列的最短时间。

迭代是否在setTimeout之前添加到事件队列中?

[0] => [1] => [2] => [3] => [4] => [console.log]

谢谢

事件队列中的每条消息对应于一个函数。setTimeout添加到队列中的函数只会在您的主函数完成后触发

例如:

for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
});
}
console.log('test')

它将输出:

test
5
5
5
5
5

最新更新