对eventloop的研究
生活随笔
收集整理的這篇文章主要介紹了
对eventloop的研究
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
javasctipt是一門單線程的非阻塞的腳本語言,單線程意味著,JavaScript
單線程意味著,javascript代碼在執行的任何時候,都只有一個主線程來處理所有的任務。
JavaScript的事件分兩種,宏任務(macro-task)和微任務(micro-task)
宏任務:包括整體代碼script,setTimeout,setInterval
微任務:Promise.then(非new Promise),process.nextTick(node中)
- 事件的執行順序,是先執行宏任務,然后執行微任務,這個是基礎,任務可以有同步任務和異步任務,同步的進入主線程,異步的進入Event Table并注冊函數,異步事件完成后,會將回調函數放入Event Queue中(宏任務和微任務是不同的Event Queue),同步任務執行完成后,會從Event Queue中讀取事件放入主線程執行,回調函數中可能還會包含不同的任務,因此會循環執行上述操作。
舉個例子
? ??setTimeout(
function()
{
console.log('setTimeout');
},1000)
new Promise(function(resolve)
{ console.log('promise');
}).then(
function() {
console.log('then');
})
console.log('console');
//2,4,3,1.
-
先執行script同步代碼
先執行new Promise中的console.log(2),then后面的不執行屬于微任務 然后執行console.log(4) - 執行完script宏任務后,執行微任務,console.log(3),沒有其他微任務了。
- 執行另一個宏任務,定時器,console.log(1)。
?
轉載于:https://www.cnblogs.com/zhouyideboke/p/10255955.html
總結
以上是生活随笔為你收集整理的对eventloop的研究的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JVM之类的加载与类加载器
- 下一篇: 计算机页面设置代码,计算机二级考试Acc