我试图了解javascript的哪些部分是同步的,哪些部分是异步的。
我的问题是,在下面的代码中,为什么它会在之前提醒16384
当循环花费的时间超过1毫秒时它会提醒1
?
setTimeout(function () {
alert(1)
}, 1)
for (i = 0; i < 16384; i++) {
for (j = 0; j < 16384; j++) {}
}
alert(j)
答案 0 :(得分:8)
JavaScript通常是单线程的。这意味着在放弃对线程的控制之前,您的setTimeout
回调不会发生。在允许for
警报发生之前,您的双setTimeout
循环会执行并显示其警报。
答案 1 :(得分:3)
JS引擎不会检查是否有任何函数正在等待超时完成,直到事件循环空闲。
即。它太忙于运行你的嵌套for循环来检查。
当它完成运行这些循环后,它会检查,发现超时已过期并立即运行。