javascript的同步性

时间:2014-03-21 21:28:13

标签: javascript

我试图了解javascript的哪些部分是同步的,哪些部分是异步的。

我的问题是,在下面的代码中,为什么它会在之前提醒16384 当循环花费的时间超过1毫秒时它会提醒1

Demo

setTimeout(function () {
    alert(1)
}, 1)

for (i = 0; i < 16384; i++) {
    for (j = 0; j < 16384; j++) {}
}


alert(j)

2 个答案:

答案 0 :(得分:8)

JavaScript通常是单线程的。这意味着在放弃对线程的控制之前,您的setTimeout回调不会发生。在允许for警报发生之前,您的双setTimeout循环会执行并显示其警报。

答案 1 :(得分:3)

JS引擎不会检查是否有任何函数正在等待超时完成,直到事件循环空闲。

即。它太忙于运行你的嵌套for循环来检查。

当它完成运行这些循环后,它会检查,发现超时已过期并立即运行。