您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關怎么判斷是瀏覽器還是node環境,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
node中window是未定義;setImmediate是定義的,在瀏覽器中未定義
timer階段:這個階段會執行setTimeout和setInterval
check階段:執行setImmediate
macro task [task] 宏任務 :script(頁面代碼)、setTimeout、setInterval、I/O事件、UI交互事件(點擊事件)
micro task [job] 微任務: Promise、process.nextTick、Promise().then()
宏任務可以有多個隊列
微任務只有一個隊列
setTimeout任務之間,推遲執行的毫秒數越小,排在隊列里面越靠前
在node里面,timers(setTimeout、setInterval)會優先于setImmediate
setTimeout(() => { console.log('setTimeout') },0); // 大于1000時,會先執行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. 在執行棧中執行一個宏任務。
2. 執行過程中遇到微任務,將微任務添加到微任務隊列中。
3. 當前宏任務執行完畢,立即執行微任務隊列中的任務。
4. 當前微任務隊列中的任務執行完畢,檢查渲染,GUI線程接管渲染。
5. 渲染完畢后,js線程接管,開啟下一次事件循環,執行下一次宏任務(事件隊列中取)。
關于“怎么判斷是瀏覽器還是node環境”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。