代码:
setTimeout(() => console.log('1'), 1000)
for (let i = 0; i < 10000; i++) {
for (let j = 0; j < 10000; j++) {}
}
setTimeout(() => console.log('2'), 0)
setTimeout(() => console.log('3'), 0)
该示例的输出是:
2
3
1
为什么会这样?
在此示例中,循环会阻塞线程 5 秒左右。此时第一个setTimeout应该已经完成并先出宏任务队列了,但事实并非如此。
在您的计算机上 10,000 * 10,000 只需不到 5 秒。