我一直在尝试理解以下一段代码:
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