JavaScript中的事件循環 為什么是微任務先運行

無意中看到這個問題,以下是個人的看法

1、性能和響應性: 微任務通常比宏任務執行得更快,因為微任務通常涉及更少的工作量。將微任務放在宏任務之前可以盡早執行那些需要快速響應的任務,提高系統的響應性能

2、Promise 的異步特性: 微任務常常與 Promise 相關,而 Promise 的設計目標之一是提供一種異步編程的方式。為了確保 Promise 的行為符合開發者的預期,微任務需要優先執行

3、避免死循環: 如果宏任務中產生了微任務,如果微任務不優先執行,而是等宏任務執行完再執行微任務,可能會導致宏任務和微任務之間的死循環。通過優先執行微任務,可以避免這種情況。

總體而言,微任務先執行是為了更好地管理異步任務,提高性能和響應性,并確保 Promise 的異步特性得到正確的實現。

怎么理解死循環呢,看看下面這個例子

// 宏任務
setTimeout(() => {console.log('宏任務開始');// 微任務Promise.resolve().then(() => {console.log('微任務開始');// 重復調用宏任務setTimeout(() => {console.log('宏任務嵌套');}, 0);console.log('微任務結束');});console.log('宏任務結束');
}, 0);

在這個例子中,當宏任務中的微任務執行時,又調度了一個新的宏任務,這樣就形成了一個宏任務和微任務之間的循環。如果這個循環不受控制,可能導致無限嵌套的任務,造成死循環。

通過優先執行微任務,可以確保在宏任務之間執行微任務,從而打破潛在的死循環。如果微任務執行的時候又調度了新的宏任務,那么這個新宏任務會在當前宏任務執行完畢后被執行,而不是立即執行,從而避免了無限循環。

總的來說,“避免死循環” 是指在異步任務的處理中,合理控制任務的執行順序,避免無限循環或遞歸,保證程序能夠正常地執行其他任務,而不陷入無盡的重復。優先執行微任務有助于管理異步流程,避免不必要的死循環。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/160574.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/160574.shtml
英文地址,請注明出處:http://en.pswp.cn/news/160574.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

3d標簽云實現過程(tagcloud.js)同步原生和 vue

寫在前面 本來是沒有準備寫這個知識點,但是下載這個 js 的時候發現很多都是要錢或者是積分的,我就不明白了一個開源了這么久的 js 怎么還有人拿來掙錢的,同時還有一些只有原生 html 的例子,但是現在都是 框架主導的一些項目&#…

【Exception】Error: Dynamic require of “path“ is not supported

Talk is cheap, show me the code. 環境 | Environment kversionOSwindows 11Node.jsv18.14.2npm9.5.0vite5.0.0vue3.3.8 報錯日志 | Error log >npm run dev> app10.0.0 dev > viteERROR failed to load config from C:\code\frontend\app1\vite.config.js …

【LeetCode二叉樹進階題目】606,102,107

二叉樹進階題目 606. 根據二叉樹創建字符串解題思路及實現 102. 二叉樹的層序遍歷解題思路及實現 107. 二叉樹的層序遍歷 II解題思路及實現 606. 根據二叉樹創建字符串 描述 給你二叉樹的根節點 root ,請你采用前序遍歷的方式,將二叉樹轉化為一個由括號…

從零開始學習typescript——運算符(算術運算符、賦值運算符、比較運算符)

算術運算符 算術運算符主要是針對數值類型和長整型;包括有加法、減法、乘法、除法、自增、自減等運算 加法() let x:number1let y:number 2console.log(xy)減法(-) let x:number1let y:number 2console.log(y-x)乘法…

晶振有哪幾種?晶振旁邊的兩個電容起什么作用?

晶振可以分為普通晶振、溫補晶振、壓控晶振、恒溫晶振、差分晶振。 普通晶振通常用作微處理器的時鐘器件,主要應用于那些穩定度要求不要的設備中,例如電視機、微波爐。 溫補晶振,在晶振內部采取了對晶體頻率、溫度特性進行補償,已…

軟件工程理論與實踐 (呂云翔) 第十三章 軟件測試方法與過程課后習題及其答案解析

第十三章 軟件測試方法與過程 1.判斷題 (1)白盒測試無須考慮模塊內部的執行過程和程序結構,只需了解模塊的功能即可。() 解析:白盒測試需要考慮模塊內部的執行過程和程序結構,以便設計測試用例和覆蓋代碼路徑。 &a…

軟文推廣有什么作用?媒介盒子分享

數字時代,品牌方以往的營銷打法可能需要應時而變,傳統的廣告模式很難將品牌推廣出去,原因就在于傳統廣告的成本高昂并且針對性較弱,而軟文推廣能夠通過較低的成本將產品或品牌信息送到消費者面前,今天媒介盒子就來分享…

58同城算法工程師一面&二面 面試題

來源:投稿 作者:LSC 編輯:學姐 一面 40min 1.Gbdt和xgboost的區別 XGBoost是對GBDT的改進和擴展,它提供了更高的效率、更好的性能、正則化技術、內置特征選擇等功能。 (1)正則化: GBDT使用基本的樹模型,并在每一輪…

vue3.0 + qiankun遇到的問題

進入子應用再回到主應用切換動態路由時 TypeError: Cannot read properties of undefined (reading ‘appWrapperGetter’) application ‘plat’ died in status UNMOUNTING: instance.$destroy is not a function 第一個報錯是因為子應用切走時沒有銷毀 vue的實例&#xff0…

常用RFC規范匯總

官網:https://www.rfc-editor.org/ The RFC Series (ISSN 2070-1721) contains technical and organizational documents about the Internet, including the specifications and policy documents produced by five streams: the Internet Engineering Task Force …

TCP/IP

分層模型 TCP 傳輸控制協議 UDP 用戶數據包協議 四層 應用層 負責發送/接收消息 傳輸層 負責拆分和組裝 .期間會有編號 網絡層 TCP/UDP 屬于網絡層, 不會判斷和處理編號 數據鏈路層 以太網 ,網絡設備 TCP 連接 TCP連接需要端口,進行通信 Java 通過Socket 接收消息 發送 …

基于SpringBoot+Vue的體檢預約管理系統

基于SpringBootVue的體檢預約管理系統的設計與實現~ 開發語言:Java數據庫:MySQL技術:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系統展示 主頁 管理員界面 用戶界面 摘要 體檢預約管理系統是一種基于Spring Boot…

Vue3常用操作

一、Vue3項目構建 1、安裝最新版本vue npm create vuelatest 2、選擇需要的配置 3、進入項目 cd 項目名稱 4、下載依賴 npm install 5、啟動項目 npm run dev

chatGLM3微調

文章目錄 一、問答數據集生成器使用設置問題啟動使用產出效果 二、進行微調第一步:下載模型第二步:項目準備2.1 下載項目2.2 然后使用 pip 安裝依賴2.3 開始 第三步進行微調3.1安裝相關依賴3.2準備數據集,并且上傳3.3對數據集進行預處理3.4 進…

如何使用技術SEO來優化評論

你在網上購買嗎?我的意思是,在當今時代,誰不這樣做?作為買家,無論您想購買什么,您都了解全面和高質量評論的價值。這是您在決定是否購買產品時考慮的重要因素。 這就是為什么許多人在網上購物之前使用評論…

移動端click事件、touch事件、tap事件的區別

在移動端,有三種常見的事件類型,click事件、touch事件、tap事件。它們的區別如下: click事件:click事件是在用戶點擊屏幕的時候觸發,如果是移動設備,則會在用戶點擊屏幕的同時觸發touch事件。但是&#xff…

【開源】基于Vue和SpringBoot的康復中心管理系統

項目編號: S 056 ,文末獲取源碼。 \color{red}{項目編號:S056,文末獲取源碼。} 項目編號:S056,文末獲取源碼。 目錄 一、摘要1.1 項目介紹1.2 項目錄屏 二、功能模塊2.1 普通用戶模塊2.2 護工模塊2.3 管理員…

uni-app中vue3+setup實現下拉刷新、上拉加載更多效果

在小程序或各類app中,下拉刷新和上拉加載更多是極為常見和使用非常頻繁的兩個功能,通過對這兩個功能的合理使用可以極大的方便用戶進行操作。 合理的設計邏輯才能更容易挽留住用戶,因為這些細節性的小功能點就變得極為重要起來。 那么在uni…

基于WEB的停車場管理系統的設計和實現【附源碼】

基于WEB的停車場管理系統的設計和實現 摘 要 隨著現代社會的快速發展,人民生活水平快速提高,汽車的數量飛速增加,與此同時停車問題也越來越受到人們的關注,為了實現對停車場進行有效的管理,結合一些停車場的模式和現狀…

游戲被攻擊了怎么辦

隨著網絡技術和網絡應用的發展,網絡安全問題顯得越來越重要,在創造一個和諧共贏的互聯網生態環境的路途中總是會遇到各種各樣的問題。最常見的當屬于DDOS攻擊(Distributed Denial of Service)即分布式阻斷服務。由于容易實施、難以…