單線程:js 是單線程的,js在同一時間只能做一件事情這就叫單線程
任務(wù)隊列:異步過程與單線程本身看起來是沖突的,就是任務(wù)隊列使這兩個不沖突
注意:優(yōu)先執(zhí)行同步任務(wù)才執(zhí)行異步任務(wù)
同步任務(wù):在js同步運行的任務(wù)叫同步任務(wù)
異步任務(wù):setTimeout 和 setInterval,DOM 事件,ES6中的promise 叫異步任務(wù)

Event Loop(事件循環(huán))
- 運行棧運行的是同步任務(wù)(運行棧執(zhí)行的是同步任務(wù))
- 瀏覽器識別了事件是一個異步任務(wù),它不會把它放到運行棧中,而是拿走。拿走之后也不是立刻放到異步隊列中,同步任務(wù)執(zhí)行完后再放入異步隊列(setTimeout 的最小時間在以前的瀏覽器中的10ms, 在最新的瀏覽器是4ms,如果設(shè)置是0 或者<4ms 都當(dāng)作是4ms)(什么時候去異步隊列取這個任務(wù)?)
- 運行棧沒有任務(wù)了,就開始執(zhí)行異步任務(wù)(這個時候異步任務(wù)變?yōu)橥饺蝿?wù)去執(zhí)行)。執(zhí)行完后如果運行棧沒有任務(wù)了,再監(jiān)聽異步任務(wù)。這個循環(huán)過程就是 Event Loop(什么時候往這個任務(wù)隊列中放異步任務(wù))

什么時候開啟異步任務(wù)
- setTimeout 和 setInterval
- DOM 事件
- ES6 中的 Promise
|