JavaScript中事件循环机制是怎样的?

更新于
2026-07-26 17:52:22
11阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1103个文字,预计阅读时间需要5分钟。

JavaScript中事件循环机制是怎样的?

目录+ 概述原理+ 同步微任务宏任务+ 案例解析+ 能否先将 promise.then 分发到微任务中?+ JS 是单线程,非阻塞,试想如果多线程,一个线程在某DOM节点上添加内容,另一个线程删除了这个节点,会发生什么?

目录
  • 概述原理
    • 同步>微任务>宏任务
  • 案例解析
    • 能否先将promise.then分发到微任务中?

js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,从一诞生,JavaScript就是单线程。

js的事件循环分为主线程(同步)和任务队列(异步),任务队列里又分为宏任务和微任务

1.宏任务(macro-task):

script(整体代码),setTimeout,setInterval,setImmediate。

优先级: setImmediate > setTimeout / setInterval

2.微任务(micro-task):

Promise,mutationObserve(观察DOM树结构发生变化时,做出相应处理),process.nextTick(Node.js 环境)。

阅读全文

本文共计1103个文字,预计阅读时间需要5分钟。

JavaScript中事件循环机制是怎样的?

目录+ 概述原理+ 同步微任务宏任务+ 案例解析+ 能否先将 promise.then 分发到微任务中?+ JS 是单线程,非阻塞,试想如果多线程,一个线程在某DOM节点上添加内容,另一个线程删除了这个节点,会发生什么?

目录
  • 概述原理
    • 同步>微任务>宏任务
  • 案例解析
    • 能否先将promise.then分发到微任务中?

js是单线程,非阻塞,试想如果是多线程,一个线程在某个DOM节点上添加内容,另一个线程删除了这个节点,这时浏览器应该以哪个线程为准?所以,为了避免复杂性,从一诞生,JavaScript就是单线程。

js的事件循环分为主线程(同步)和任务队列(异步),任务队列里又分为宏任务和微任务

1.宏任务(macro-task):

script(整体代码),setTimeout,setInterval,setImmediate。

优先级: setImmediate > setTimeout / setInterval

2.微任务(micro-task):

Promise,mutationObserve(观察DOM树结构发生变化时,做出相应处理),process.nextTick(Node.js 环境)。

阅读全文