天天看點

0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環

以下代碼執行的結果是什麼? 【結果是1 2 3 】

0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環

​ 單線程導緻的問題就是後面的任務等待前面任務完成,如果前面任務很耗時(比如讀取網絡資料),後面任務不得不一直等待!!

​ 為了解決這個問題,利用多核 CPU 的計算能力,HTML5 提出 Web Worker 标準,允許 JavaScript 腳本建立多個線程,但是子線程完全受主線程控制。于是,JS 中出現了同步任務和異步任務。

​ 前一個任務結束後,再執行後一個任務,程式的執行順序與任務的排列順序是一緻的、同步的。

​ 比如做飯的同步做法:我們要燒水煮飯,等水開了(10分鐘之後),再去切菜,炒菜。

​ 你在做一件事情時,因為這件事情會花費很長時間,在做這件事的同時,你還可以去處理其他事情。

​ 比如做飯的異步做法,我們在燒水的同時,利用這10分鐘,去切菜,炒菜。

0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環

事件循環 : 由于主線程不斷的重複獲得任務、執行任務、再擷取任務、再執行,是以這種機制被稱為事件循環( event loop)。

0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環
0182 JavaScript執行機制:單線程,同步任務和異步任務,執行棧,消息隊列,事件循環