我試圖圍繞我的頭,瞭解javascript異步如何在單線程瀏覽器環境中工作。在瀏覽器中的javascript:異步任務執行模型
由於異步,我們可以同時處理定時器和xhr請求。 現在假設我有類似下面
function doStuff() {
for(var i=0; i<100000000; i++) {
// do something to make proc busy
if(i%1000 === 0) {
console.log('in for loop');
}
}
}
setTimeout(function() {
console.log('timed out')
}, 2);
doStuff();
doStuff();
doStuff();
定時器設置爲非常小的值(2ms的),所以我想它應該工作如下:
1)計時器回調排隊
2 )doStuff()
被執行(作爲一個整體?),它需要一些
3)定時器的回調運行時間(多於那些2毫秒),因爲這裏提供時刻betweet一個doStuff()
執行與另一
4)未來doStuff()
被稱爲
4)最後doStuff()
被稱爲
我看到的卻是,所有這三個doStuff()
事情之前計時器回調火災完成。而且它比那些2ms的時間要長得多。是的,我知道這個時間值設定在setTimeout
不能保證。
我的問題是javascript如何執行代碼?什麼是在異步隊列被調用之前一次執行的最小的原子塊?