JavaScript中的事件循环机制是如何实现非阻塞的,并支持长尾任务处理的?

2026-04-01 12:290阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1085个文字,预计阅读时间需要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 环境)。

阅读全文

本文共计1085个文字,预计阅读时间需要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 环境)。

阅读全文