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

时间:2018-08-19 21:36:42

标签: javascript

一段时间以来,我一直试图理解以下代码:

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]

谢谢

1 个答案:

答案 0 :(得分:1)

事件队列中的每条消息都对应一个功能。 setTimeout添加到队列中的功能将仅在主要功能完成后触发

例如:

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

它将输出:

test
5
5
5
5
5