javascript線程,任務隊列和事件循環

1.爲什麼說JavaScript是單線程的?

瀏覽器渲染頁面過程中涉及到的幾個線程有:JavaScript執行線程,負責執行js代碼,UI線程,負責UI展示,JavaScript事件循環線程,管

理JavaScript事件,其中JavaScript執行線程和UI線程是互斥的.如果說JavaScript是多線程的話,那麼多個JavaScript執行線程在操作同一

個dom的時候,比如分別把一個按鈕變成紅色和黃色,這時候UI線程就懵逼了,應該聽誰的?JavaScript中爲了避免這種出現這種情況,這些

線程必須分開執行,所以JavaScript是單線程的,這已經成了這門語言的核心特徵,將來也不會改變。

2.JavaScript任務隊列結構和事件循環

單線程就意味着,所有任務需要排隊,前一個任務結束,纔會執行後一個任務。如果前一個任務耗時很長,後一個任務就不得不

一直等着。

JavaScript中執行任務是按照隊列數據結構形式來執行的,如下圖:


JavaScript中的任務:

1.同步任務:for循環,求和,js賦值,js運算等

2.異步任務:dom事件,bom的api處理 ajax

所謂"回調函數"callback),就是那些會被主線程掛起來的代碼。異步任務必須指定回調函數,當主線程開始執行異步任務,

就是執行對應的回調函數。

循環機制:

JavaScript主線程直接執行同步任務,異步任務先執行一部分,然後退出主線程執行,然後等異步任務再準備好之後再交給主線程執行,

總之,JavaScript的代碼是隊列的形式一個個進行執行的,同一時間只能執行一段代碼.

其中,事件循環機制涉及到定時器,回調函數的處理,可以參考文章:點擊打開鏈接



發佈了71 篇原創文章 · 獲贊 72 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章