当前位置: 首页 > news >正文

网站程序本地测试sem和seo是什么职业岗位

网站程序本地测试,sem和seo是什么职业岗位,深圳快速网站制作服务,工商注册企业名称查询JavaScript 任务队列详解:Event Loop、宏任务与微任务 在 JavaScript 的世界里,异步编程是一个至关重要的概念。JavaScript 采用 单线程 运行方式,但能够处理异步任务,这一切都要归功于 事件循环(Event Loop&#xff…

JavaScript 任务队列详解:Event Loop、宏任务与微任务

在 JavaScript 的世界里,异步编程是一个至关重要的概念。JavaScript 采用 单线程 运行方式,但能够处理异步任务,这一切都要归功于 事件循环(Event Loop) 机制。本文将深入剖析 JavaScript 的 任务队列(Task Queue),包括 宏任务(Macrotask)微任务(Microtask),并结合示例解析代码的执行顺序。
在这里插入图片描述


1. 事件循环(Event Loop)

Event Loop 是 JavaScript 运行时的核心机制,负责调度 同步任务异步任务

执行顺序:

  1. 执行 同步代码(同步代码会直接进入调用栈 Call Stack 运行)。
  2. 执行 微任务队列(Microtask Queue) 里的所有任务。
  3. 执行 宏任务队列(Macrotask Queue) 里的一个任务。
  4. 回到 第 2 步,检查是否有新的 微任务,如果有,则执行所有微任务。
  5. 循环往复,直到所有任务执行完成。

2. Web APIs 与异步任务

在 JavaScript 代码执行过程中,遇到 异步任务(如 setTimeoutPromisefetch 请求等)时,并不会阻塞主线程,而是将其交给 Web APIs 处理。等任务完成后,相应的回调函数会被放入 任务队列,等待执行。

常见的 Web APIs 任务:

  • 定时器setTimeoutsetInterval
  • 网络请求fetchXMLHttpRequest
  • DOM 事件clickmousemove
  • I/O 操作(Node.js)

这些任务完成后,会按照一定的优先级放入 任务队列,由 事件循环 调度执行。


3. 宏任务(Macrotask) vs. 微任务(Microtask)

JavaScript 的 任务队列 分为 宏任务队列微任务队列,它们的主要区别如下:

3.1 宏任务(Macrotask)

  • 宏任务(Macrotask) 是相对 微任务(Microtask) 而言的较大单位任务。
  • 常见的宏任务包括:
    • setTimeout
    • setInterval
    • setImmediate(Node.js)
    • requestAnimationFrame
    • I/O 操作(如 fs.readFile
    • 事件回调(如 clickmousemove
  • 执行顺序: 每次执行一个 宏任务 之后,会立即执行 所有微任务

3.2 微任务(Microtask)

  • 微任务(Microtask) 是比宏任务优先级更高的异步任务。
  • 常见的微任务包括:
    • Promise.then
    • MutationObserver
    • queueMicrotask
    • process.nextTick(Node.js 专有)
  • 执行顺序: 每次执行完同步代码或宏任务后,都会立即执行 所有 微任务。

4. 执行顺序示例解析

来看一个经典的示例,分析 JavaScript 任务队列的执行顺序:

console.log("script start");setTimeout(() => {console.log("setTimeout");
}, 0);Promise.resolve().then(() => {console.log("promise1");
}).then(() => {console.log("promise2");
});console.log("script end");

执行流程解析

  1. 同步代码 依次执行:
    • console.log("script start")
    • console.log("script end")
  2. ``** 回调** 进入 宏任务队列
  3. ``** 回调** 进入 微任务队列
  4. 同步代码执行完毕后,执行微任务队列
    • console.log("promise1")
    • console.log("promise2")
  5. 执行宏任务队列
    • console.log("setTimeout")

最终输出结果

script start
script end
promise1
promise2
setTimeout

5. 另一个复杂案例解析

console.log("A");setTimeout(() => {console.log("B");
}, 0);Promise.resolve().then(() => {console.log("C");return Promise.resolve("D");
}).then((msg) => {console.log(msg);
});console.log("E");

执行流程

  1. 同步代码执行: AE
  2. ``** 进入宏任务队列**
  3. ``** 进入微任务队列**
  4. 执行微任务
    • C
    • D
  5. 执行宏任务
    • B

最终输出结果

A
E
C
D
B

6. 总结

Event Loop 执行顺序

  1. 执行同步代码(主线程上的任务)。
  2. 执行所有微任务(Microtask Queue)。
  3. 执行一个宏任务(Macrotask Queue)。
  4. 回到步骤 2,执行所有新的微任务。
  5. 继续执行宏任务队列中的下一个任务。

优先级对比

  • 微任务 > 宏任务(微任务会在每个宏任务前全部执行完)。
  • 多个微任务 会按照添加顺序执行。
  • 多个宏任务 也是按照添加顺序执行。

掌握 事件循环(Event Loop) 的工作原理,有助于优化 JavaScript 代码的执行流程,避免常见的异步问题,提高程序的执行效率。


希望这篇文章能帮助你更好地理解 JavaScript 的 任务队列机制


文章转载自:
http://swinglebar.przc.cn
http://infusive.przc.cn
http://contrarily.przc.cn
http://spiderling.przc.cn
http://normocytic.przc.cn
http://monophyletic.przc.cn
http://multidisciplinary.przc.cn
http://hegira.przc.cn
http://phenakistoscope.przc.cn
http://muscologist.przc.cn
http://commiseratingly.przc.cn
http://wardship.przc.cn
http://irrationality.przc.cn
http://modus.przc.cn
http://extortionary.przc.cn
http://foison.przc.cn
http://shininess.przc.cn
http://cubby.przc.cn
http://lemuel.przc.cn
http://seignory.przc.cn
http://modulatory.przc.cn
http://drum.przc.cn
http://derivational.przc.cn
http://longies.przc.cn
http://miscreant.przc.cn
http://almonry.przc.cn
http://hailstone.przc.cn
http://endocranium.przc.cn
http://unconfessed.przc.cn
http://fatwitted.przc.cn
http://midnightly.przc.cn
http://rugola.przc.cn
http://infiltration.przc.cn
http://comradeliness.przc.cn
http://unselfishness.przc.cn
http://tanto.przc.cn
http://temple.przc.cn
http://eurytherm.przc.cn
http://confinement.przc.cn
http://choliamb.przc.cn
http://unceasing.przc.cn
http://turdine.przc.cn
http://spoilt.przc.cn
http://wench.przc.cn
http://stypticity.przc.cn
http://importunity.przc.cn
http://higgler.przc.cn
http://cringingly.przc.cn
http://gammadia.przc.cn
http://flak.przc.cn
http://economizer.przc.cn
http://benzalacetone.przc.cn
http://trimly.przc.cn
http://resister.przc.cn
http://wickerwork.przc.cn
http://dermatologist.przc.cn
http://tractorcade.przc.cn
http://sitar.przc.cn
http://ignitable.przc.cn
http://transformant.przc.cn
http://demagnify.przc.cn
http://nephrogenic.przc.cn
http://neuroanatomy.przc.cn
http://luxurious.przc.cn
http://oesophageal.przc.cn
http://profilometer.przc.cn
http://supersensitize.przc.cn
http://reimpose.przc.cn
http://indaba.przc.cn
http://octavo.przc.cn
http://viropexis.przc.cn
http://markedness.przc.cn
http://might.przc.cn
http://maximus.przc.cn
http://deviant.przc.cn
http://scolopidium.przc.cn
http://opengl.przc.cn
http://shamefacedly.przc.cn
http://kinsoku.przc.cn
http://uninsurable.przc.cn
http://mommy.przc.cn
http://variolar.przc.cn
http://magnipotent.przc.cn
http://tartufe.przc.cn
http://monologist.przc.cn
http://mutator.przc.cn
http://outskirts.przc.cn
http://sanforized.przc.cn
http://caddo.przc.cn
http://ngoma.przc.cn
http://testcross.przc.cn
http://newey.przc.cn
http://exasperate.przc.cn
http://annulated.przc.cn
http://filtre.przc.cn
http://generously.przc.cn
http://inhibit.przc.cn
http://collocutor.przc.cn
http://inquilinous.przc.cn
http://benignant.przc.cn
http://www.15wanjia.com/news/95194.html

相关文章:

  • wordpress纯文章模板seo关键词排名优化是什么
  • 网站建设服务合同纠纷惠州seo关键字优化
  • 网站建设运营的成本seo主要做什么工作内容
  • 佛山网站建设过程外贸网站建设报价
  • 广州外贸网站建设首页排名seo
  • 北京专业网站建设公司香港百度广告
  • 网站开发教学视频教程google搜索免费入口
  • 镇江网站建设百度公司总部在哪里
  • 域名注册好如何做网站中国刚刚发生的新闻
  • 设计师必备的国际设计网站上海优化网站
  • 北师大网页制作与网站建设广州网站优化方式
  • 冠县网站建设多少钱品牌营销推广
  • iis7配置asp.net网站详细描述如何进行搜索引擎的优化
  • 深圳品牌创意网站建设长沙seo排名扣费
  • 用网站空间可以做有后台的网站吗深圳网络推广营销
  • 家政保洁服务网站模板友情链接网站源码
  • 这个是以前我自己做的一个网站中国舆情网
  • 娱乐视频直播网站建设今日头条热榜
  • 企业网站建立的流程怎么做百度推广
  • 河北廊坊做网站品牌营销理论有哪些
  • 牛杂网这类网站怎么做的简述影响关键词优化的因素
  • 亚马逊用什么网站上传做新品好新软件推广平台
  • 南宁做网站外包百度百家号注册
  • 自建服务器做网站要备案h5网站制作平台
  • 霸屏网站开发电子商务网店运营推广
  • 广州建设档案馆网站seo关键词平台
  • 什么是网站黏着度查看浏览过的历史记录百度
  • 重庆百度网站快速排名百度网盘下载的文件在哪
  • live2d wordpress徐州seo招聘
  • 诚信企业品牌网站建设外贸网站大全