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

河北疫情最新通报厦门百度关键词优化

河北疫情最新通报,厦门百度关键词优化,兴国做网站,厦门建站系统建设JavaScript 事件循环机制(Event Loop)详解 JavaScript 是 单线程、非阻塞 语言,依赖 事件循环(Event Loop) 来实现异步编程。它的执行模型包括 调用栈(Call Stack)、任务队列(Task …

JavaScript 事件循环机制(Event Loop)详解

JavaScript 是 单线程、非阻塞 语言,依赖 事件循环(Event Loop) 来实现异步编程。它的执行模型包括 调用栈(Call Stack)、任务队列(Task Queue)和微任务队列(Microtask Queue)


1. 事件循环(Event Loop)基本流程

事件循环的核心工作方式:

  1. 同步任务(Synchronous) 进入 调用栈 依次执行。
  2. 遇到 异步任务(如 setTimeout、Promise、I/O 操作),交给 Web API(如浏览器、Node.js 运行时)处理,并继续执行同步代码。
  3. 同步代码执行完毕,调用栈清空,事件循环检查 微任务队列(Microtask Queue),依次执行所有微任务。
  4. 微任务执行完毕,进入 宏任务队列(Macro Task Queue),取出第一个任务执行。
  5. 重复以上步骤。

2. 任务类型:同步任务 vs 异步任务

JavaScript 任务分为:

(1) 同步任务(Synchronous)

  • 直接执行,放入 调用栈(Call Stack)
  • 例子:
    console.log('同步任务1'); // 立即执行
    

(2) 异步任务(Asynchronous)

  • 由 Web API 处理,待合适时机进入任务队列:
    • 宏任务(Macro Task)
    • 微任务(Micro Task)

3. 宏任务(Macro Task) vs 微任务(Micro Task)

任务类型常见API进入队列
宏任务(Macro Task)setTimeoutsetIntervalsetImmediate(Node.js)、I/OUI渲染任务队列(Task Queue)
微任务(Micro Task)Promise.then()queueMicrotask()MutationObserverprocess.nextTick()(Node.js)微任务队列(Microtask Queue)

4. 事件循环执行流程

console.log('同步任务1');setTimeout(() => {console.log('宏任务1');
}, 0);Promise.resolve().then(() => {console.log('微任务1');
});console.log('同步任务2');

执行顺序解析

  1. console.log('同步任务1') 执行(同步任务)
  2. setTimeout() 放入 宏任务队列,等待执行
  3. Promise.then() 放入 微任务队列
  4. console.log('同步任务2') 执行(同步任务)
  5. 调用栈清空,检查 微任务队列,执行 console.log('微任务1')
  6. 微任务清空后,执行 宏任务队列,输出 console.log('宏任务1')
最终输出顺序
同步任务1
同步任务2
微任务1
宏任务1

5. setTimeout(fn, 0) 为什么不立即执行?

  • setTimeout(fn, 0) 也会进入 宏任务队列,需要等当前同步任务执行完毕,并在 微任务全部执行完毕后,才能执行。
  • 示例
    setTimeout(() => console.log('宏任务'), 0);
    Promise.resolve().then(() => console.log('微任务'));
    console.log('同步任务');
    
    执行顺序
    同步任务
    微任务
    宏任务
    

6. PromisesetTimeout 谁先执行?

  • Promise.then() 是微任务,会先执行
  • setTimeout() 是宏任务,等微任务执行完才执行

示例

setTimeout(() => console.log('setTimeout'), 0);
Promise.resolve().then(() => console.log('Promise'));

执行顺序

Promise
setTimeout

7. 事件循环完整示例

console.log('start');setTimeout(() => {console.log('setTimeout');
}, 0);Promise.resolve().then(() => {console.log('Promise1');
}).then(() => {console.log('Promise2');
});console.log('end');

执行顺序

  1. console.log('start')(同步任务)
  2. setTimeout() 进入 宏任务队列
  3. Promise.then() 进入 微任务队列
  4. console.log('end')(同步任务)
  5. 同步任务结束,执行微任务
    • Promise1
    • Promise2
  6. 微任务执行完毕,执行宏任务
    • setTimeout

最终输出:

start
end
Promise1
Promise2
setTimeout

8. async/await 也是微任务

示例

async function asyncFunc() {console.log('A');await Promise.resolve();console.log('B');
}console.log('C');
asyncFunc();
console.log('D');

执行顺序

C
A
D
B

解释

  1. console.log('C')(同步任务)
  2. 调用 asyncFunc(),输出 A
  3. await Promise.resolve()console.log('B') 进入 微任务队列
  4. console.log('D')(同步任务)
  5. 执行微任务
    • console.log('B')

9. setTimeout()setImmediate()(Node.js)

Node.js 中:

  • setTimeout(fn, 0) 进入 定时器队列
  • setImmediate(fn) 进入 Check 队列
  • setImmediate() 通常比 setTimeout(0) 先执行

示例

setTimeout(() => console.log('setTimeout'), 0);
setImmediate(() => console.log('setImmediate'));

输出顺序(Node.js)

setImmediate
setTimeout

10. 关键点总结

概念说明
同步任务立即执行,进入 调用栈
异步任务由 Web API 处理,稍后执行
宏任务(Macro Task)setTimeoutsetIntervalsetImmediateI/O
微任务(Micro Task)Promise.then()queueMicrotask()MutationObserver
事件循环(Event Loop)先执行同步任务 → 再执行微任务 → 再执行宏任务

11. 最佳实践

避免阻塞主线程

  • 使用 setTimeout(fn, 0)requestIdleCallback(fn) 处理密集计算

优先使用微任务优化异步流程

  • Promise.then()setTimeout() 先执行

了解 async/await 也是微任务

  • await 后的代码会在微任务队列中执行

总结

  1. JavaScript 是单线程,使用事件循环管理异步任务
  2. 任务分为
    • 同步任务(调用栈直接执行)
    • 异步任务(进入宏任务/微任务队列)
  3. 执行顺序
    • 先执行同步任务
    • 再执行所有微任务
    • 最后执行宏任务
  4. Promise.then()setTimeout() 先执行
  5. async/await 本质上是 Promise,属于微任务

这些概念对于理解 JavaScript 的异步执行至关重要!🚀

http://www.dtcms.com/wzjs/349581.html

相关文章:

  • 微信开发网站建设程序软文推广模板
  • mv网站建设百度关键词点击器
  • 网站建设公司响应式网站模板下载上线了建站
  • 企业网站新闻wp怎么做网上怎么推广产品
  • 展厅设计理念和设计构思网站的seo方案
  • 创新建设资金网站软件开发公司有哪些
  • 重庆职业能力建设投稿网站如何做推广推广技巧
  • 为什么网站建设价格不一网络营销师是做什么的
  • 贵阳网站建设公司快速刷排名seo软件
  • 做360网站优化快速百度指数有什么作用
  • 网站开发算什么费用优化seo哪家好
  • 做网站要学点什么百度网盘网站入口
  • 网页设计师联盟网站百度人工服务电话
  • 网站打开速度很慢成人馆店精准引流怎么推广
  • 做网站的去哪找客户百度竞价登陆
  • ps个人网站怎么做无锡网站关键词推广
  • 微信公众号微网站建设app软件开发
  • 北京共振设计公司官网杭州网站推广优化公司
  • win7 iis默认网站设置企业培训机构排名前十
  • 网页制作和网站建设的区别泉州关键词排名工具
  • 手机端网站整站下载优化水平
  • 外贸网站推荐企业网站推广方法
  • 建设集团属于什么单位网络优化的工作内容
  • 烟台做网站多钱唐老鸭微信营销软件
  • 自己做的网页怎么上传到网站网页怎么做出来的
  • 国外可以做推广的网站吗百度搜索什么关键词排名
  • 电子商务网站建设课后习题网站排名顾问
  • oa办公系统怎么注册品牌关键词优化
  • 网站建设咨询电话百度点击率排名有效果吗
  • 为什么大型网站都用php青岛网站设计