js任務執行順序

JS 線程簡述

js是單線程的,一次只能執行一個任務,執行完畢後才能繼續下一個。

js執行任務的方式也叫作同步執行,同步和異步與我們平時理解的不太一樣,平時的同步我們會認爲是多個事情一起做,但是在js中我們所謂的同步任務是一個接一個的像是排隊一樣的去做。

同步任務是指在主線程上排隊執行的任務,只有前一個任務執行完畢,才能繼續執行下一個任務,當我們打開網站時,網站的渲染過程,比如元素的渲染,其實就是一個同步任務

但是隻有同步任務是不能滿足日常的一些需求的,這個時候便出現了一個異步概念。

異步任務是指不進入主線程,而進入任務隊列的任務,只有任務隊列通知主線程,某個異步任務可以執行了,該任務纔會進入主線程,當我們打開網站時,像圖片的加載,音樂的加載,其實就是一個異步任務

js中的異步任務又分宏任務和微任務(大概如下所示):

宏任務:渲染事件、請求、script、setTimeout、setInterval

微任務:Promise.then、MutationObserver(監聽DOM)

JS 執行機制

現在我們已經知道了js的同步和異步任務以及異步任務中的宏任務和微任務,下面就是執行順序的問題啦。

當執行任務棧中的同步任務執行完後,就會去任務隊列中拿一個宏任務放到執行棧中執行,執行完該宏任務中的所有微任務,再到任務隊列中拿宏任務,即一個宏任務、所有微任務渲染、一個宏任務、所有微任務渲染...(不是所有微任務之後都會執行渲染),如此形成循環,即事件循環(EventLoop)
簡單來講就是:
同步任務01 > 異步任務 > 宏任務01 > 微任務01 > 微任務02... > 宏任務02...  

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章