我已经尝试理解下面这段代码有一段时间了:
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]
谢谢
发布于 2018-08-20 06:00:17
事件队列中的每条消息都对应一个函数。由setTimeout
添加到队列中的函数只有在主函数完成后才会被触发。
举个例子:
for (var i = 0; i < 5; i++) {
setTimeout(function() {
console.log(i);
});
}
console.log('test')
它将输出:
test
5
5
5
5
5
https://stackoverflow.com/questions/51922031
复制相似问题