摘要:想了解什么是宏任務(wù)和微任務(wù),必須得知道的執(zhí)行順序,是單線程,執(zhí)行時存在各種任務(wù)隊列。一些論證討論使用宏任務(wù)和微任務(wù)知識完成實現(xiàn)為數(shù)組,因為可能同時有很多個回調(diào)
想了解什么是宏任務(wù)和微任務(wù),必須得知道JavaScript的執(zhí)行順序,JavaScript是單線程,執(zhí)行時存在各種任務(wù)隊列。
常見的宏任務(wù)業(yè)界流行的認(rèn)為,可能個別瀏覽器有差異
類型 | 瀏覽器 | Node |
---|---|---|
I/O | ? | ? |
setTimeout | ? | ? |
setInterval | ? | ? |
setImmediate | ? | ? |
requestAnimationFrame | ? | ? |
業(yè)界流行的認(rèn)為,可能個別瀏覽器有差異
類型 | 瀏覽器 | Node |
---|---|---|
process.nextTick | ? | ? |
MutationObserver | ? | ? |
Promise.then catch finally | ? | ? |
setTimeout(_ => console.log(4)) new Promise(resolve => { resolve() console.log(1) }).then(_ => { console.log(3) }) console.log(2)經(jīng)典提問: setTimeout設(shè)置為0的作用
關(guān)鍵就是setTimeout是宏任務(wù),不管延遲設(shè)置為多少還是會進(jìn)入任務(wù)隊列。一些論證、討論
https://www.cnblogs.com/xieex/archive/2008/07/11/1241137.html
http://www.cnblogs.com/silin6/p/4333999.html
使用宏任務(wù)和微任務(wù)知識完成:promise ES5實現(xiàn)function promise(fn) { var value = null, callbacks = []; //callbacks為數(shù)組,因為可能同時有很多個回調(diào) this.then = function (onFulfilled) { callbacks.push(onFulfilled); return this; }; function resolve(value) { setTimeout(function () { callbacks.forEach(function (callback) { callback(value); }); }, 0) } fn(resolve); } function test() { return new promise(function(resolve) { console.log("1"); resolve(); }) } test().then(function(resolve) { console.log("2"); }).then(function(resolve) { console.log("3"); });
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109190.html
js運行機制-事件循環(huán)EventLoop 先來看看一段js代碼: console.log(script begin) setTimeout(() => { console.log(setTimeout) },0) new Promise((resolve) => { console.log(promise begin) for(let i = 0; i < 1000; i...
摘要:事件觸發(fā)線程主要負(fù)責(zé)將準(zhǔn)備好的事件交給引擎線程執(zhí)行。進(jìn)程瀏覽器渲染進(jìn)程瀏覽器內(nèi)核,主要負(fù)責(zé)頁面的渲染執(zhí)行以及事件的循環(huán)。第二輪循環(huán)結(jié)束。 將自己讀到的比較好的文章分享出來,大家互相學(xué)習(xí),各位大佬有好的文章也可以留個鏈接互相學(xué)習(xí),萬分感謝! 線程與進(jìn)程 關(guān)于線程與進(jìn)程的關(guān)系可以用下面的圖進(jìn)行說明: showImg(https://segmentfault.com/img/bVbjSZt?...
摘要:事件觸發(fā)線程主要負(fù)責(zé)將準(zhǔn)備好的事件交給引擎線程執(zhí)行。進(jìn)程瀏覽器渲染進(jìn)程瀏覽器內(nèi)核,主要負(fù)責(zé)頁面的渲染執(zhí)行以及事件的循環(huán)。第二輪循環(huán)結(jié)束。 將自己讀到的比較好的文章分享出來,大家互相學(xué)習(xí),各位大佬有好的文章也可以留個鏈接互相學(xué)習(xí),萬分感謝! 線程與進(jìn)程 關(guān)于線程與進(jìn)程的關(guān)系可以用下面的圖進(jìn)行說明: showImg(https://segmentfault.com/img/bVbjSZt?...
摘要:為了最終確認(rèn),進(jìn)行最后一次驗證,在第一個里面多加一層同步新加行新加行新加行新加行新加行新加行同步輸出結(jié)果如下同步同步確認(rèn)完畢,的確是一層一層的執(zhí)行。而是微任務(wù),是宏任務(wù)。 久經(jīng)前端開發(fā)沙場,會經(jīng)歷各式各樣的需求,處理這些需求時候,會使用各種各樣的api和功能,這里集中對setTimeout和Promise的異步功能進(jìn)行討論一下。 單獨使用的執(zhí)行模式 這里就使用Promise作為例子,...
閱讀 1499·2023-04-26 00:08
閱讀 853·2021-11-23 18:51
閱讀 1715·2021-11-12 10:34
閱讀 1047·2021-10-14 09:43
閱讀 531·2021-08-18 10:23
閱讀 2613·2019-08-30 15:55
閱讀 3425·2019-08-30 11:05
閱讀 2826·2019-08-29 12:50