事實上我把事件迴圈理解成我們編寫的j**ascript和瀏覽器或者node之間的乙個橋梁
瀏覽器的事件迴圈是乙個我們編寫的j**ascript**和瀏覽器api呼叫(settimeout/ajax/監聽事件等)的乙個橋梁, 橋梁之間他們通過**函式進行溝通。
node的事件迴圈是乙個我們編寫的j**ascript**和系統呼叫(file system、network等)之間的乙個橋梁, 橋梁 之間他們通過**函式進行溝通的
如果執行js中存在非同步操作,例如settimeout(),則會被放入呼叫棧中,執行會結束,不會阻塞後面**執行
其實內部呼叫 web api,在合適的時機將函式加入到事件佇列中
事件佇列中的函式會被放入呼叫棧,然後被執行。
事件迴圈中事實上有兩個佇列
那麼事件迴圈對於兩個佇列的優先順序是怎麼樣的呢?
main script中的**優先執行(編寫的頂層script**);
在執行任何乙個巨集任務之前(不是佇列,是乙個巨集任務),都會先檢視微任務佇列中是否有任務需要執行
settimeout(function() ).then(
function
() ).then(
function
() );
console.log("then2");
});});new promise(function
(resolve) ).then(
function
() );
settimeout(
function
() );
console.log(2);
queuemicrotask(() =>);
new promise(function
(resolve) ).then(
function
() );
//pr1//2
//then1
//queuemicrotask1
//then3
//set1
//then2
//then4
//set2
async functionpromise中的為同步**塊,then後為非同步 微任務async 函式中:await前的可以看做promise外部的diamanteawait相當於在執行promise中的為同步**塊async1 ()
async
function
async2 ()
console.log('script start')
settimeout(
function
() , 0)
async1();
new promise (function
(resolve) ).then (
function
() )
console.log('script end')
//script start
//async1 start
//async2
//promise1
//script end
//aysnc1 end
//promise2
//settoueout
await後的相當於在執行then的** 微任務
js 事件迴圈 巨集任務 微任務
console.log 1 settimeout function then function new promise function resolve then function settimeout function then function 先分析 的執行步驟 1 從上向下執行 consol...
事件迴圈 巨集任務 微任務
在js中我們經常會需要 同時 進行多項工作,例如 定時器 事件 非同步資料互動等,那麼js是如何管理這些任務的,又是如何確定他們的執行順序的?首先,所有的語言都擁有併發模型的概念,也就是說多個任務如何同時執行,大部分語言支援多執行緒執行,js擁有所有語言中最簡單的併發模型 js使用單執行緒的 事件迴...
JS微任務和巨集任務
1.巨集任務 包括整體 script,settimeout,setinterval i o ui 互動事件 setimmediate node.js 環境 2.微任務 promise mutaionobserver process.nexttick node.js 環境 promise.resolv...