一段时间以来,我一直试图理解以下代码:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
});
}
我对为什么会产生输出有一个想法:
5
5
5
5
5
但是只是想阐明我对事件循环在JavaScript中如何工作的理解。
是不是每次迭代都在setTimeout
运行之前在事件循环中创建一个事件?
我知道默认情况下,setTimeout
函数使用0
作为其milliseconds
的值,但是它仅保证 minimum 的时间是方法将添加到事件队列中。
在setTimeout
之前,迭代是否添加到了事件队列中?
[0] => [1] => [2] => [3] => [4] => [console.log]
谢谢
答案 0 :(得分:1)
事件队列中的每条消息都对应一个功能。 setTimeout
添加到队列中的功能将仅在主要功能完成后触发。
例如:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
});
}
console.log('test')
它将输出:
test
5
5
5
5
5