JS執行機制:同步異步 ( 宏任務和微任務)
// js執行機制:
// js是單線程語言,但是允許同步和異步執行
//同步就是一個任務完成后再下一個,異步就是可以多個任務同時進行.
//問題1 : 結果是 1111 333 2222
console.log(1111)
setTimeout(function () {
console.log(22222222);
}, 0);
console.log(333333333)
//問題2:
//同步任務: 同步任務都在主線程上執行,形成一個執行棧
//異步任務:js的異步是通過回調函數實現的 ,一般異步任務有三種類型:
//1.普通事件,如click,resize等
//2.資源加載, 如 load, error等
//3.定時器,包括setinterval,settimeout等
//異步任務相關的回調函數添加到任務隊列中(任務隊列也叫做消息隊列),等到主線程空閑時再執行.
console.log(1111)
setTimeout(function () {
console.log(22222222);
}, 0);
console.log(333333333)
//輸出結果是: 1111 333 2222;
//問題2的執行步驟: 先把執行棧的同步任務執行完,然后依次讀取任務隊列中的異步任務,被讀取的任務進入執行棧,開始執行.

異步任務: 分為 宏任務和微任務

先執行宏任務, 每執行完一個宏任務, 就檢查有沒有待執行的微任務, 如果有, 則執行所有的微任務, 完成之后再執行下一個宏任務.
//問題3: 事件循環 (event loop)
console.log(1111)
document.onclick = function () {
console.log('click')
}
setTimeout(function () {
console.log(22222222);
}, 5000);
console.log(333333333)
//這個會先輸出 111 3333,然后根據點擊時間,
// 0-5s點擊: 任務隊列中會依次有onclick和settimeout兩個任務,結果會先輸出click再222;
// 5s以后點擊:任務隊列中會依次有 settimeout和onclick兩個任務,結果會先輸出222再click
//在這個過程中,主線程執行完,會查詢任務隊列,取出一個任務,推入主線程處理,
//然后繼續重復該動作, 該過程稱為事件循環

promise 有三種狀態:初始化,成功,失敗。

浙公網安備 33010602011771號