這篇文章將為大家詳細(xì)講解有關(guān)怎么判斷是瀏覽器還是node環(huán)境,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)建站是一家專業(yè)提供東洲企業(yè)網(wǎng)站建設(shè),專注與網(wǎng)站建設(shè)、成都做網(wǎng)站、H5響應(yīng)式網(wǎng)站、小程序制作等業(yè)務(wù)。10年已為東洲眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進行中。
node中window是未定義;setImmediate是定義的,在瀏覽器中未定義
timer階段:這個階段會執(zhí)行setTimeout和setInterval
check階段:執(zhí)行setImmediate
macro task [task] 宏任務(wù) :script(頁面代碼)、setTimeout、setInterval、I/O事件、UI交互事件(點擊事件)
micro task [job] 微任務(wù): Promise、process.nextTick、Promise().then()
宏任務(wù)可以有多個隊列
微任務(wù)只有一個隊列
setTimeout任務(wù)之間,推遲執(zhí)行的毫秒數(shù)越小,排在隊列里面越靠前
在node里面,timers(setTimeout、setInterval)會優(yōu)先于setImmediate
setTimeout(() => { console.log('setTimeout') },0); // 大于1000時,會先執(zhí)行setImmediate setImmediate(()=> { console.log('setImmediate')})
console.log('start'); setTimeout(function (){ console.log('timeout'); },10); new Promise((resolve) => { console.log('promise'); resolve() setTimeout(() => { console.log('Promsie中的setTimeout'); },0); }).then(() => { console.log('then'); }); console.log('end');
運行機制
1. 在執(zhí)行棧中執(zhí)行一個宏任務(wù)。
2. 執(zhí)行過程中遇到微任務(wù),將微任務(wù)添加到微任務(wù)隊列中。
3. 當(dāng)前宏任務(wù)執(zhí)行完畢,立即執(zhí)行微任務(wù)隊列中的任務(wù)。
4. 當(dāng)前微任務(wù)隊列中的任務(wù)執(zhí)行完畢,檢查渲染,GUI線程接管渲染。
5. 渲染完畢后,js線程接管,開啟下一次事件循環(huán),執(zhí)行下一次宏任務(wù)(事件隊列中取)。
關(guān)于“怎么判斷是瀏覽器還是node環(huán)境”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。