返回

一文点透事件循环、同步异步与宏任务微任务

前端

时光荏苒,白驹过隙。转眼间,前端江湖风云变幻,层出不穷的框架层叠而出,让初入前端领域的少侠们应接不暇。而事件循环、同步异步、宏任务微任务这些前端进阶路上的拦路虎,更是让不少江湖侠客望而生畏。今天,我们就来一文点透这些概念,助少侠们一举突破,闯荡前端江湖。

同步与异步

在前端的世界中,同步和异步犹如两极。同步操作是指程序按照顺序依次执行,前一个操作完成后才执行后一个操作。而异步操作则相反,后一个操作可以在前一个操作未完成时就开始执行。

同步操作示例:

console.log('同步操作1');
console.log('同步操作2');

异步操作示例:

setTimeout(() => {
  console.log('异步操作1');
}, 0);
console.log('异步操作2');

在上面的示例中,同步操作会按照顺序依次输出结果,而异步操作则会先输出"异步操作2",然后才会输出"异步操作1"。这是因为异步操作被交给了浏览器提供的异步执行环境,浏览器会根据自己的调度机制来执行这些操作。

事件循环

事件循环是浏览器用来管理和执行异步任务的机制。它不断循环,检查是否有待执行的异步任务,如果有,则将其取出并执行。

事件循环的运作流程:

  1. 执行同步任务。
  2. 检查是否有待执行的宏任务,如果有,则执行宏任务。
  3. 检查是否有待执行的微任务,如果有,则执行微任务。
  4. 重复步骤1-3,直到所有任务执行完毕。

宏任务与微任务

宏任务和微任务是事件循环中执行异步任务的两种不同类型。

宏任务:

  • 由 JavaScript 引擎创建。
  • 包括 setTimeoutsetInterval 和 DOM 事件等任务。
  • 在事件循环中,宏任务会在微任务执行完毕后执行。

微任务:

  • 由 JavaScript 引擎创建。
  • 包括 PromiseMutationObserverprocess.nextTick 等任务。
  • 在事件循环中,微任务会在宏任务执行完毕后执行,并且会优先于下一次宏任务执行。

宏任务和微任务的执行顺序:

  1. 同步任务。
  2. 微任务。
  3. 宏任务。

举例说明

setTimeout(() => {
  console.log('宏任务1');
}, 0);

Promise.resolve().then(() => {
  console.log('微任务1');
});

console.log('同步任务');

在上面的示例中,同步任务会先执行,然后微任务会优先执行,最后宏任务才会执行。

总结

事件循环、同步异步、宏任务微任务是前端进阶路上的重要概念。掌握这些概念,对于编写高性能、响应式的前端应用至关重要。

SEO优化