JavaScript 操作宏任務與微任務
宏任務與微任務
- javaScript是單線程語言(如果多線程dom會瘋掉)
- 所以在同一時間只能執(zhí)行一個任務,稱為主線程,用來執(zhí)行同步任務
- 同時還有兩個任務列表用于存放異步任務,宏任務、微任務
- 執(zhí)行順序為:主線程=>微任務=>宏任務
有關定時器
- 定時器模塊,到達時間點將其放入宏任務隊列
- 如果主線程沒有任務則執(zhí)行,如果有則等待執(zhí)行完成后再繼續(xù)執(zhí)行
- 如果有兩個相同時間的定時器則上面的先執(zhí)行下面的后執(zhí)行
- 如果兩個時間不同的定時器則時間短的先執(zhí)行時間長的后執(zhí)行
注意點:
- 定時器的⏲是在定時器模塊中完成的,完成后就和普通異步任務一樣了,
- 時間方面由于主線程實踐過長的原因,有可能會延后

有關Promise
- promise的構造函數為同步任務
- 執(zhí)行順序永遠為:同步=>微任務=>宏任務
- 在嵌套代碼中可能出現(xiàn)宏任務中有同步、宏任務、微任務,這時將他們放到下一次執(zhí)行中的隊列/主線程等待執(zhí)行
setTimeout(() => {
console.log("定時器");
setTimeout(() => {
console.log("timeout timeout");
}, 0);
new Promise(resolve => {
console.log("settimeout Promise");
resolve();
}).then(() => {
console.log("settimeout then");
});
}, 0);
new Promise(resolve => {
console.log("Promise");
resolve();
}).then(() => {
console.log("then");
});
console.log("ssss");
執(zhí)行順序:Promise=>ssss=>then=>定時器=>settimeout Promise=>settimeout then=>timeout timeout
DOM渲染任務
瀏覽器渲染:CSS+DOM執(zhí)行遇到js優(yōu)先執(zhí)行js
可以把js盡量放在下面:避免白屏
任務共享內存
任務不會同時執(zhí)行,會一個一個的被調度,他們共享內存
Promise微任務處理復雜業(yè)務
使用promise可以將任務變成異步任務使其不影響同步任務的執(zhí)行
到此這篇關于JavaScript 操作宏任務與微任務的文章就介紹到這了,更多相關JavaScript宏任務與微任務內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Javascript基礎_簡單比較undefined和null 值
下面小編就為大家?guī)硪黄狫avascript基礎_簡單比較undefined和null 值。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-06-06
JavaScript中利用各種循環(huán)進行遍歷的方式總結
這篇文章主要介紹了JavaScript中利用各種循環(huán)進行遍歷的方式總結,是JS入門學習中的基礎知識,需要的朋友可以參考下2015-11-11
JavaScript高級程序設計(第3版)學習筆記8 js函數(中)
接著看函數——這個具有魔幻色彩的對象。在上篇文章中說函數內部屬性時,還遺留了一個this內部屬性沒有解釋,不過在說this之前,我想先說一說執(zhí)行環(huán)境和作用域的概念2012-10-10

