写在前面从一个最简单的示例说起:console.log('scriptstart');setTimeout(function(){console.log('setTimeout');},0);Promise.resolve().then(function(){console.log('promise1');}).then(function(){console.log('promise2');});
原创
2021-01-14 19:33:58
216阅读
写这篇文章的原因有两个:其一,团队小伙伴之前分享过《macrotask microtask介绍》这个话题,当时留下了一些疑问,至今仍模棱两可;其二,看到了「奇舞周刊」转发了一篇《从 薛定谔的猫 聊到 Event loop》的文章,内容精炼,但是有一些原则性的问题和规范有偏
原创
2023-03-13 18:42:12
60阅读
总结: 因为如果使用macrotask, vue的batch (一个一个执行nextTick内部维护数组中的函数) 的这个
原创
2022-05-29 00:39:57
555阅读
这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,可以揍我。 不论你是javascript新手还是老鸟,不论是面试求职,还是日常开发工作,我们经常会遇到这样的情况:给定的几行代码,我们需要知道其输出内容和顺序。因为ja ...
转载
2021-09-13 16:39:00
400阅读
2评论
读了这篇文章后相信对event loop机制了解就比较全面了,间接的提升我们编程的内功。
转载
2022-03-03 17:22:50
143阅读
原文: https://blog.csdn.net/sjn0503/article/details/76087631 简单来讲,整体的js代码这个macrotask先执行,同步代码执行完后有microtask执行microtask,没有microtask执行下一个macrotask,如此往复循环至结
转载
2018-05-28 09:51:00
187阅读
2评论
Event Loop 在 JavaScript 中,任务被分为两种,一种宏任务(MacroTask),一种叫微任务(MicroTask)。 MacroTask(宏任务) script全部代码、setTimeout、setInterval、I/O、UI Rendering。 MicroTask(微任务 ...
转载
2021-10-09 09:19:00
146阅读
2评论
js中的宏任务和微任务宏任务(macrotask )和微任务(microtask )macrotask 和 microtask 表示异步任务的两种分类。在挂起任务时,JS 引擎会将所有任务按照类别分到这两个队列中,首先在 macrotask 的队列(这个队列也被叫做 task queue)中取出第一个任务,执行完毕后取出 microtask 队列中的所有任务顺序执行;之后再取 macrotask
转载
2021-05-20 08:31:00
232阅读
2评论
一、异步编程核心概念1.1 事件循环机制任务队列(Task Queue)
├── 宏任务队列(MacroTask Queue)
│ ├── setTimeout
│ ├── setInterval
│ ├── I/O操作
│ └── UI渲染
│
└── 微任务队列(MicroTask Queue)
├── Promise.then/catch/finally
├─
在ES6和ES5中promise的执行也有不同点(上述提到,ES6中promise属microtask;在ES5中,暂未接触到有api直接操作microtask的,所以.then的异步是用setTimeout代替,属macrotask,导致输出有差异);关于promise也可参考上文 分步理解 Pr
转载
2018-12-29 15:33:00
532阅读
2评论
1 宏任务 常见的有setTimeout ,setInterval等2 微任务 常见的有Promise, process.nextTick等执行过程:js执行时,首先从macrotask queue中取出第一个宏任务,执行完毕后,从microtask中取出所有微任务执行,接住再从macrotask中取出一个宏任务执行。script//宏任务setTimeout(()=>{console.lo
原创
2023-07-27 16:02:49
60阅读
javascript从诞生之日起就是一门 单线程的 非阻塞的 脚本语言,单线程意味着,javascript代码在执行的任何时候,都只有一个主线程来处理所有的任务,非阻塞靠的就是 event loop(事件循环),本文就讲解下事件循环。event loop它最主要是分三部分:主线程、宏队列(macrotask)、微队列(microtask)js的任务队列分为同步任务和异步任务,所有的同步任务都是在主线程里执行的,异步任务可能会在macrotask或者microtask里面宏队列(macrot...
原创
2021-11-29 16:31:25
138阅读
宏任务是由宿主(浏览器、Node)发起的,而微任务由 JS 自身发起。宏任务(Macrotask)大概如下:setTimeout setInterval MessageChannel I/O setImmediate(Node环境) script(整体代码块) 微任务(Microtask)大概如下:MutationObserver(浏览器环
转载
2024-01-13 16:50:59
195阅读
宏任务和微任务一、宏队列,macrotask,也叫tasks。 一些异步任务的回调会依次进入macro task queue,等待后续被调用setTimeoutsetIntervalsetImmediate (Node独有)requestAnimationFrame (浏览器独有)I/OUI rendering (浏览器独有)二、微队列,microtask,也叫jobs。 另一些异步任务的回调会依
转载
2023-12-27 16:12:30
85阅读
1.js的执行顺序,先同步后异步2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列3.调用Promise 中的resolve,reject属于微任务队列,setTimeout属于宏任务队列注意以上都是 队列,先进先出。 微任务包括 `process.nextTick` ,`promise` ,`MutationObserver`。宏任务包括 `
转载
2024-02-04 15:53:53
443阅读
点赞
宿主(浏览器)发起的任务我们可以称之为宏观任务(macrotask);引擎(js)自己也可以发起任务,这个任务就叫做微观任务(microtask)。 一、js宏任务和微任务分别有哪些?1、js宏任务有:<script>整体代码、setTimeout、setInterval、setImmediate、Ajax、DOM事件。2、js微任务有:process.nextTick、Mu
转载
2023-10-20 20:24:58
284阅读
刚开始接触vue的时候,哇nextTick好强,咋就在这里面写就是dom更新之后,当时连什么macrotask、microtask都不知道(如果你也不是很清楚,推荐点这里去看一下,也有助于你更好地理解本文),再后来,写的多了看得多了愈发膨胀了,就想看看这个nextTick到底是咋实现的 一、源码 关
转载
2020-12-14 19:09:00
190阅读
2评论
call stack (调用栈) 作用: 所有代码执行地方Event loop 包括两个队列 宏观队列(存放 macrotask) 微观队列(存放 microtask)默认规则:Event loop 优先调用 微观队列中的任务 当微观队列为空时才会调用 宏观队列默认规则:Event loop 优先调用 微观队列中的任务 当微观队列为空时才会调用 宏观队列默认规则:Event loop 优先调用
转载
2021-01-20 20:16:40
361阅读
2评论
# 事件循环 Event Loop
本质是:
1. 作为单线程js对于异步事件的处理机制
2. 或者可以说是 只有一个主线程js的处理逻辑
3. 如何保证主线程, 有序并高效 或非阻塞 的处理呢? => 事件循环机制 Event Loop
4. 异步任务也是有优先级的,分为 宏任务 MacroTask, 微任务 MicroTask 你也可能会碰到以下问题: - j
js中什么是微任务和宏任务
在 JavaScript 引擎中,任务分为两种类型:微任务(microtask)和宏任务(macrotask)。 微任务是指在当前任务执行结束后立即执行的任务,它可以看作是在当前任务的“尾巴”添加的任务。常见的微任务包括 Promise 回调和 process.nextTick。 宏任务是指需要排队等待 JavaScript 引擎空闲时才能执行的任务。常见的宏任务包括
原创
精选
2023-03-24 17:42:31
295阅读