JS中的事件循环

JS中的事件循环

Jack · 2023-06-20354人阅读6人喜欢

任务分类

  • 同步任务(Synchronous Tasks):同步任务是指在主线程中按照顺序执行的任务,一旦开始执行就会一直执行,直到完成。常见的同步任务包括函数调用、计算操作等。
  • 异步任务(Asynchronous Tasks):异步任务是指不会立即执行的任务,它们通常会被放入事件队列中,在满足某些条件后才会被执行。常见的异步任务包括定时器、事件监听、Promise 的异步操作等。
  • 微任务(Microtasks):微任务是一类特殊的异步任务,它们的执行时机比一般异步任务要早。在每轮事件循环的"微任务阶段",会依次执行微任务队列中的任务。常见的微任务包括 Promise 的 then 方法、async/await 等。
  • 宏任务(Macrotasks):宏任务是指需要被放入事件队列中等待执行的任务,它们的执行时机相对较晚,通常会在当前事件循环的下一轮执行。常见的宏任务包括定时器回调、DOM 事件回调等。

事件循环是JavaScript中处理异步操作的核心机制。在JavaScript中,所有的代码都运行在一个单线程中,也就是说同一时间只能执行一个任务。为了处理异步操作,JavaScript运行时环境维护了一个事件队列,其中存放着即将执行的任务。

当代码执行时,首先会执行同步任务,这些任务按照顺序在调用栈中执行。接着,事件循环会检查微任务队列是否为空,如果不为空,则会依次执行微任务队列中的所有任务。微任务的执行优先级比宏任务要高,因此微任务会在宏任务之前执行。

然后,事件循环会从事件队列中取出一个宏任务,并执行它。这个过程可能涉及到等待I/O操作、定时器等。执行宏任务期间,可能会产生新的宏任务,它们会被放入事件队列中等待执行。

点个赞吧