电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

淺談JavaScript宏任務和微任務執行順序

瀏覽:84日期:2023-09-28 14:59:13
目錄一、JavaScript單線程1. 同步任務(synchronous) 2. 異步任務(asynchronous)二、任務隊列(task queue)1.執行棧擴展一下setTimeout的理解一、JavaScript單線程

JavaScript是單線程指的是同一時間只能干一件事情,只有前面的事情執行完,才能執行后面的事情。導致遇到耗時的任務時后面的代碼無法執行。

在此之前啊 我們必須了解同步和異步

1. 同步任務(synchronous)

console.log(123); console.log(456); for (let i = 1; i <= 5; i++) { console.log(i); }

淺談JavaScript宏任務和微任務執行順序

顧名思義 得到的一定是 順序執行

2. 異步任務(asynchronous)

setTimeout(() => { console.log(’定時器’); }, 0) console.log(’奧特曼’);

按普通的執行順序來說 定時器在上面 應該先輸出定時器 在輸出 奧特曼

淺談JavaScript宏任務和微任務執行順序

最后拿到的結果卻先輸出奧特曼 在輸出了定時器 原因呢就是 setTimeout是異步任務

補充一個知識點 setTimeout的定時器 不管延遲多少毫秒 也是異步的 每個瀏覽器的時間也是不同的,各個瀏覽器都有差異 但定義了0 最小也是4毫秒

二、任務隊列(task queue)

通過上面代碼知道setTimeout是異步的 我們就搞清了執行順序優先級 同步代碼>異步代碼 所以說 在任務隊列中 分為兩大類 1.同步任務 2. 異步任務

1.執行棧

(1)所有同步任務都在主線程上執行,形成一個執行棧(execution context stack)。

(2)主線程之外,還存在一個'任務隊列'(task queue)。只要異步任務有了運行結果,就在'任務隊列'之中放置一個事件。

(3)一旦'執行棧'中的所有同步任務執行完畢,系統就會讀取'任務隊列',看看里面有哪些事件。那些對應的異步任務,于是結束等待狀態,進入執行棧,開始執行。

(4)主線程不斷重復上面的第三步,稱為事件循環(Event Loop)。

簡單舉個梨子

淺談JavaScript宏任務和微任務執行順序

同樣都是去吃飯 但是p2 省去了出去的時間過程

簡單了解后 我們再來深入了解 異步任務中的 宏任務(macrotask )和 微任務(microtask )

個人理解: 對于宏任務和微任務 可以理解為兩種異步的形態, 異步有兩個孩子 宏任務 和 微任務

宏任務中的方法:1. script (可以理解為外層同步代碼,作為入口 ) 2. setTimeout/setInterval

微任務中的方法:1.Promise 2. nextTick

而他們的執行順序 是 微任務 先輸出 在輸出 宏任務

口說無憑 上代碼

setTimeout(() => { console.log(’定時器’); }, 0) new Promise((resolve) => { console.log(’同步代碼’)resolve(’異步代碼’) }).then((res) => { console.log(res); }) console.log(’奧特曼’);

淺談JavaScript宏任務和微任務執行順序

注意奧 new Promise是創建一個構造函數 這個過程是同步的,而.then方法是異步的 所以代碼先執行 同步>微任務>宏任務

為了更加詳細 用圖來描述執行過程 下面的圖有一丁丁大 學習不怕費流量哦

淺談JavaScript宏任務和微任務執行順序

淺談JavaScript宏任務和微任務執行順序

這些圖在融合一下

淺談JavaScript宏任務和微任務執行順序

擴展一下setTimeout的理解

疑問點1 同步代碼執行完了 setTimeout會從0計時嗎

setTimeout(() => { console.log(’setTimeout’); }, 1000); console.log(’奧特曼’); for (let i = 0; i < 1000; i++) { console.log(’’); }

淺談JavaScript宏任務和微任務執行順序

此時要表明的是 我在for循環的時候setTimeout也會去計時 他會去開啟一個定時器模塊 ,所以說執行主線程的時候,定時器模塊已經開始執行了,所以不會再去等待1秒去執行

(千萬別以為同步執行完了,再去計時哦)

疑問點2:兩個定時器 上面的定時器先執行 在執行下面的定時器嗎?

測驗我們只修要在加一個定時器 看看誰先執行就好了

setTimeout(() => { console.log(’setTimeout1’); }, 2000); setTimeout(() => { console.log(’setTimeout2’); }, 1000);

淺談JavaScript宏任務和微任務執行順序

結果發現 如果有兩個定時器,時間少的會優先放到主線程里去執行

疑問點3:定義一個變量為0 設置兩個一樣的定時器事件 他會輸出什么結果 ? (面試題)

i = 0 setTimeout(() => { console.log(++i); //1 }, 1000); setTimeout(() => { console.log(++i); //2 }, 1000);

看到現在 肯定要知道 定時器宏任務不是一起執行的 依次執行??!

宏任務、微任務 執行順序面試題

console.log(’1’); setTimeout(function () { console.log(’2’); process.nextTick(function () {console.log(’3’); }) new Promise(function (resolve) {console.log(’4’);resolve(); }).then(function () {console.log(’5’) }) }) process.nextTick(function () { console.log(’6’); }) new Promise(function (resolve) { console.log(’7’); resolve(); }).then(function () { console.log(’8’) }) setTimeout(function () { console.log(’9’); process.nextTick(function () {console.log(’10’); }) new Promise(function (resolve) {console.log(’11’);resolve(); }).then(function () {console.log(’12’) }) })

答案 :

第一輪 執行外面同步代碼 : 1 7

第二輪 執行 微任務 : 6 8

第三輪 宏任務 第一個setTimeout : 同步 2 4 微任務 3 5 第二個setTimeout:同步 9 11 微任務 10 12

整體答案: 1、7 、6、8、2、4、3、5、9、11、10、12

到此這篇關于淺談JavaScript宏任務和微任務執行順序的文章就介紹到這了,更多相關JavaScript宏任務和微任務執行順序內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 锤式粉碎机,医药粉碎机,锥式粉碎机-无锡市迪麦森机械制造有限公司 | 环氧乙烷灭菌器_压力蒸汽灭菌器_低温等离子过氧化氢灭菌器 _低温蒸汽甲醛灭菌器_清洗工作站_医用干燥柜_灭菌耗材-环氧乙烷灭菌器_脉动真空压力蒸汽灭菌器_低温等离子灭菌设备_河南省三强医疗器械有限责任公司 | 广东成考网-广东成人高考网| 盘古网络技术有限公司| 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 深圳工程师职称评定条件及流程_深圳职称评审_职称评审-职称网 | 温州中研白癜风专科_温州治疗白癜风_温州治疗白癜风医院哪家好_温州哪里治疗白癜风 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 珠宝展柜-玻璃精品展柜-首饰珠宝展示柜定制-鸿钛展柜厂家 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 数年网路-免费在线工具您的在线工具箱-shuyear.com | 国际金融网_每日财经新资讯网 | [官网]叛逆孩子管教_戒网瘾学校_全封闭问题青少年素质教育_新起点青少年特训学校 | 压片机_高速_单冲_双层_花篮式_多功能旋转压片机-上海天九压片机厂家 | 上海公众号开发-公众号代运营公司-做公众号的公司企业服务商-咏熠软件 | 编织人生 - 权威手工编织网站,编织爱好者学习毛衣编织的门户网站,织毛衣就上编织人生网-编织人生 | 华东师范大学在职研究生招生网_在职研究生招生联展网 | 深圳市宏康仪器科技有限公司-模拟高空低压试验箱-高温防爆试验箱-温控短路试验箱【官网】 | 心得体会网_心得体会格式范文模板 | 浙江上沪阀门有限公司| 山东锐智科电检测仪器有限公司_超声波测厚仪,涂层测厚仪,里氏硬度计,电火花检漏仪,地下管线探测仪 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 四川职高信息网-初高中、大专、职业技术学校招生信息网 | 金属管浮子流量计_金属转子流量计厂家-淮安润中仪表科技有限公司 | 合景一建-无尘车间设计施工_食品医药洁净车间工程装修总承包公司 | 防水套管|柔性防水套管|伸缩器|伸缩接头|传力接头-河南伟创管道 防水套管_柔性防水套管_刚性防水套管-巩义市润达管道设备制造有限公司 | 国资灵活用工平台_全国灵活用工平台前十名-灵活用工结算小帮手 | 体感VRAR全息沉浸式3D投影多媒体展厅展会游戏互动-万展互动 | 车充外壳,车载充电器外壳,车载点烟器外壳,点烟器连接头,旅行充充电器外壳,手机充电器外壳,深圳市华科达塑胶五金有限公司 | 地图标注-手机导航电子地图如何标注-房地产商场地图标记【DiTuBiaoZhu.net】 | 蓝莓施肥机,智能施肥机,自动施肥机,水肥一体化项目,水肥一体机厂家,小型施肥机,圣大节水,滴灌施工方案,山东圣大节水科技有限公司官网17864474793 | 3d可视化建模_三维展示_产品3d互动数字营销_三维动画制作_3D虚拟商城 【商迪3D】三维展示服务商 广东健伦体育发展有限公司-体育工程配套及销售运动器材的体育用品服务商 | 环比机械| 铝合金电阻-无源谐波滤波器-上海稳达电讯设备厂 | 神马影院-实时更新秒播| 洗瓶机厂家-酒瓶玻璃瓶冲瓶机-瓶子烘干机-封口旋盖压盖打塞机_青州惠联灌装机械 | OLChemim试剂-ABsciex耗材-广州市自力色谱科仪有限公司 | 消防设施操作员考试报名时间,报名入口,报考条件 |