JS時間迴圈巨集任務微任務 講解 面試題

2022-09-10 05:03:13 字數 1835 閱讀 7076

事實上我把事件迴圈理解成我們編寫的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 function

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

promise中的為同步**塊,then後為非同步 微任務async  函式中:await前的可以看做promise外部的diamanteawait相當於在執行promise中的為同步**塊

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...