巨集任務與微任務

2022-07-26 14:06:13 字數 1154 閱讀 9539

/*

js是單執行緒,所以也可以說是主線程,所以js**都是在主線程執行的,

只不過我們要區分它是同步執行還是非同步執行;

當乙個**是非同步的話,對應的是**函式。

不同的任務對應不同的**,比如:定時器的**,傳送js的**,對應事件的**

定時器模組,網路請求模組,事件處理模組,**的執行取決於模組什麼時候將**函式放入到事件佇列eq,

js引擎會通過輪詢方式去詢問這個事件佇列是否有可執行的**,如果有,就會將函式鉤出去,鉤到主線程去執行。

所以**函式也叫鉤子函式。

* * */

/*巨集任務

分類:settimeout setinterval

requestanimationframe(用於提前告訴提醒瀏覽器我們將要在下一次進行動畫之前,幫我們呼叫對應的**函式)

* 它們都是非同步任務的同時又是巨集任務

* * 1.巨集任務所處的佇列就是巨集任務佇列

* 2.第乙個巨集任務佇列只有乙個任務:執行主線程的js**

* 3.巨集任務佇列可以有多個

* 4.當巨集任務佇列中的任務全部執行完之後會檢視是否有微任務,

* 有則先執行微任務佇列中的所有任務,

* 沒有則檢視是否有巨集任務佇列

* */

/*微任務

* 分類:new promise().then(**) process.nexttick

* 1.微任務所處的佇列就是微任務佇列

* 2.只有乙個微任務佇列

* 3.在上乙個巨集任務佇列執行完畢後如果有微任務佇列就會執行微任務佇列中的所有任務

* */

console.log('------start---');//巨集任務1,這個執行完,下一步會優先處理微任務。

settimeout(()=>,0)

new promise((resolve,reject)=>

resolve();//修改promise例項物件的狀態為成功的狀態

}).then(()=>)

console.log('-----end----')//

//輸出結果:------start---

//0,1,2,3,4,

//-----end----

//promise例項成功**執行

//settimeout

巨集任務與微任務

之前我們討論過js 執行的同步和非同步,js的單執行緒執行機制不會改變 但是僅僅懂得同步非同步是遠遠不夠的 比如說下面這些 1 settimeout function 4new promise function resolve,reject then function 10 console.log ...

js 巨集任務與微任務總結

script settimeout setinterval messagechannel postmessage setimmediate requestanimationframe i o操作 ui渲染 process.nexttick mutationobserver promise.then ...

巨集任務和微任務

概念 1.巨集任務 當前呼叫棧中執行的 成為巨集任務。主 快,定時器等等 3.巨集任務中的事件放在callback queue中,由事件觸發執行緒維護 微任務的事件放在微任務佇列中,由js引擎執行緒維護。執行機制02 1.在執行棧中執行乙個巨集任務。2.執行過程中遇到微任務,將微任務新增到微任務佇列...