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的代碼是隊列的形式一個個進行執行的,同一時間只能執行一段代碼.
其中,事件循環機制涉及到定時器,回調函數的處理,可以參考文章:點擊打開鏈接