教育行業(yè)A股IPO第一股(股票代碼 003032)

全國咨詢/投訴熱線:400-618-4000

JavaScript同步和異步執(zhí)行機制有哪些區(qū)別?

更新時間:2022年06月09日16時33分 來源:傳智教育 瀏覽次數:

JavaScript 語言的一大特點就是單線程,也就是說,同一個時間只能做一件事。這是因為 Javascript 這門腳本語言誕生的使命所致——JavaScript 是為處理頁面中用戶的交互,以及操作 DOM 而誕生的。比如我們對某個 DOM 元素進行添加和刪除操作,不能同時進行。 應該先進行添加,之后再刪除。

單線程就意味著,所有任務需要排隊,前一個任務結束,才會執(zhí)行后一個任務。這樣所導致的問題是: 如果 JS 執(zhí)行的時間過長,這樣就會造成頁面的渲染不連貫,導致頁面渲染加載阻塞的感覺。

為了解決這個問題,利用多核 CPU 的計算能力,HTML5 提出 Web Worker 標準,允許JavaScript 腳本創(chuàng)建多個線程。于是,JS 中出現了同步和異步。

同步

前一個任務結束后再執(zhí)行后一個任務,程序的執(zhí)行順序與任務的排列順序是一致的、同步的。比如做飯的同步做法:我們要燒水煮飯,等水開了(10分鐘之后),再去切菜,炒菜。

異步

你在做一件事情時,因為這件事情會花費很長時間,在做這件事的同時,你還可以去處理其他事情。比如做飯的異步做法,我們在燒水的同時,利用這10分鐘,去切菜,炒菜。他們的本質區(qū)別: 這條流水線上各個流程的執(zhí)行順序不同。

同步任務都在主線程上執(zhí)行,形成一個執(zhí)行棧。JS 的異步是通過回調函數實現的。一般而言,異步任務有普通事件(如 click、resize 等)、資源加載(如 load、error 等)
定時器(包括 setInterval、setTimeout 等)三種類型,異步任務相關添加到任務隊列中(任務隊列也稱為消息隊列)。
同步任務和異步任務的執(zhí)行機制

多學一招:JS 執(zhí)行機制

1. 先執(zhí)行執(zhí)行棧中的同步任務。

2. 異步任務放入任務隊列中。

3. 一旦執(zhí)行棧中的所有同步任務執(zhí)行完畢,系統(tǒng)就會按次序讀取任務隊列中的異步任務,于是被讀取的異步任務

結束等待狀態(tài),進入執(zhí)行棧,開始執(zhí)行。

js執(zhí)行機制

0 分享到:
和我們在線交談!