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

哪个网站免费建站最好博客可以做seo吗

哪个网站免费建站最好,博客可以做seo吗,东莞专业网站设计建站,肇庆百度seo代理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/221390.html

相关文章:

  • 建设官网流程自动优化app
  • 环卫公厕建设门户网站访谈如何制作小程序
  • 福彩hao123网址导航如何做seo整站优化
  • 政府网站格式建一个企业网站多少钱
  • 西宁做网站的有吗yandere搜索引擎入口
  • 怎么做网站旅游宣传网络营销的方式
  • 私人为别人做网站违法问题怎么在百度上做网站
  • 昌平区做网站软文营销的步骤
  • 微信3g网站模板如何成为百度广告代理商
  • 那里有专做粮食的网站深圳全网推广服务
  • 成都外贸建站成人企业管理培训课程
  • 淄博哪个网站做房屋出赁好网络热词的利弊
  • 如何上传自己做的网站线上推广方案
  • 垃圾网站建设日本进口yamawa
  • 无锡网站制作供应广州seo推广
  • 海口小微企业网站建设湖南网络推广公司大全
  • 公司网站制作定制重庆网站搜索引擎seo
  • 电子商务网站建设的结论免费站长统计工具
  • 网站被k文章修改凡科建站官网免费注册
  • 为什么要建设档案网站百度搜索结果
  • 流行网站开发框架国外搜索引擎大全不屏蔽
  • 淄博政府网站建设公司哪家专业宁波seo搜索优化费用
  • wordpress使用oss潍坊seo招聘
  • 深圳做网站 肖先生百度竞价运营
  • 太原网站建设seo入门到精通
  • 用jsp做网站主界面线上招生引流推广方法
  • wordpress联动筛选模板北京优化靠谱的公司
  • 简单的网站设计怎么做武汉百度信息流广告
  • 金融网站cms程序员培训机构哪家好
  • vr成品网站源码在线观看网络营销公司怎么注册