關於Event Loop,查閱多篇博客,或多或少總有些出入,在此寫下本身關於Event Loop的理解
許多地方把Promise標記爲微任務,可是這容易讓人誤覺得new Promise的時候這個過程是個微任務。實際上是Promsie.then、Promise.catch是微任務,new Promise的時候當作普通的生成對象來看待,因此在此我標記爲Promise.then
執行本輪個宏任務html
那麼問題來了,多個宏任務隊列時,下一趟的宏任務該取哪一個呢?上述方法中,我是將宏任務都當作一個隊列的
/* example1 */ setTimeout(function () { console.log(1); },7); new Promise(function (resolve) { console.log(2); for (var i = 0; i < 10000; i++) { i == 99 && resolve(); } }).then(function () { console.log(3); setTimeout(() => { console.log(4); }); }) console.log(5); // 2 3 5 (4 1) 後兩個數字的順序與兩定時器的delayTime有關,誰先知足觸發條件就先輸出誰 (html5 標準中,規定delayTime >= 4ms) /* example2 */ setTimeout(_ => console.log(4)); new Promise(resolve => { resolve() console.log(1) }).then(_ => { console.log(3) Promise.resolve().then(_ => { console.log('before timeout') }).then(_ => { Promise.resolve().then(_ => { console.log('also before timeout') }) }) }) console.log(2); // 這個也不難,分析分析就出結果了
綜上 菜雞二問前端
這些問題都需在不斷的深刻了解中才能知道答案
以上就是閱讀多篇博客以後我的對Event Loop的一些看法,或有不正確之處,望批評指正