繁華開滿天機
2018-12-20 14:23:38
js中異步執(zhí)行的運行機制是只有主線程空了,才會去讀取"任務(wù)隊列",那么什么時候才是主線程空了啊,是指當(dāng)前script標(biāo)簽里面的代碼都執(zhí)行完嗎,還是怎么樣?<script> var n = 0; setTimeout(function () { alert(++n); }, 0); for (var i = 0; i <= 1000000; i++) { }</script><script> alert("a");</script><script> alert("b");</script>
1 回答

慕絲7291255
TA貢獻(xiàn)1859條經(jīng)驗 獲得超6個贊
<script>
var n = 0;
setTimeout(function () {
console.log(++n);
}, 0);
var begin = new Date().getTime()
while(new Date().getTime() - begin < 2000) {
}
</script>
<script>
console.log("a");
</script>
<script>
console.log("b");
</script>
用這個來測試。使用alert因為會發(fā)生阻塞,所以會發(fā)生想不到的事情。
然后script
會有一個解析的過程。你使用alert
時,后面的script
還沒有被解析進(jìn)主線程,而setTimeout
雖然是0的延遲,但是還是有個最小值的。alert阻塞了后面的解析,此時延時器時間到了,而主線程是空的(沒有被解析進(jìn)主線程)所以會先彈1。
添加回答
舉報
0/150
提交
取消