一道題引出的Event Loop

<script type="text/javascript">
    console.log(1);
    setTimeout(function(){
        console.log(2);
    },0);
    console.log(3);
</script>
複製代碼

相信你們,都知道,這道題的輸出結果是javascript

1java

3瀏覽器

2bash

這道題引出了以下的知識點:

js的單線程是什麼?異步

js在一個時間內,只能作一件事情。

什麼是任務隊列?函數

任務隊列分爲同步任務和異步任務。例如:console.log()這樣的語句屬於同步任務,setInterval()/setTimeout()這樣的語句屬於異步任務。

什麼是Event Loop?oop

在js單線程的運行機制中,會優先執行同步任務,當遇到setInterval()/setTimeout()這樣的異步任務時, js引擎不會把它們放在運行棧中執行,而是瀏覽器的timer模塊會把它們拿走,時間到了(指定時器函數的時間),timer模塊會把它們放到異步隊列中,js引擎發現運行棧中沒有要執行的代碼了,就會去讀取異步隊列中的內容,放到運行棧中去執行,這時setTimeout()/setInterval()函數體中的內容,就在成爲了運行棧中的同步任務了,執行完後,再會去監聽異步隊列中是否有內容,若是有繼續執行,如此反覆,這個循環的過程就是Event Loop。
相關文章
相關標籤/搜索