写在前面从一个最简单的示例说起: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》的文章,内容精炼,但是有一些原则性的问题和规范有偏
总结: 因为如果使用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 )和微任务(microtaskmacrotaskmicrotask 表示异步任务的两种分类。在挂起任务时,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 ├─
原创 3月前
68阅读
在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
js
原创 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(浏览器环
宏任务和微任务一、宏队列,macrotask,也叫tasks。 一些异步任务的回调会依次进入macro task queue,等待后续被调用setTimeoutsetIntervalsetImmediate (Node独有)requestAnimationFrame (浏览器独有)I/OUI rendering (浏览器独有)二、微队列,microtask,也叫jobs。 另一些异步任务的回调会依
1.js的执行顺序,先同步后异步2.异步中任务队列的执行顺序: 先微任务microtask队列,再宏任务macrotask队列3.调用Promise 中的resolve,reject属于微任务队列,setTimeout属于宏任务队列注意以上都是 队列,先进先出。 微任务包括 `process.nextTick` ,`promise` ,`MutationObserver`。宏任务包括 `
转载 2024-02-04 15:53:53
443阅读
1点赞
宿主(浏览器)发起的任务我们可以称之为宏观任务(macrotask);引擎(js)自己也可以发起任务,这个任务就叫做微观任务(microtask)。 一、js宏任务和微任务分别有哪些?1、js宏任务有:<script>整体代码、setTimeout、setInterval、setImmediate、Ajax、DOM事件。2、js微任务有:process.nextTick、Mu
刚开始接触vue的时候,哇nextTick好强,咋就在这里面写就是dom更新之后,当时连什么macrotaskmicrotask都不知道(如果你也不是很清楚,推荐点这里去看一下,也有助于你更好地理解本文),再后来,写的多了看得多了愈发膨胀了,就想看看这个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阅读
  • 1
  • 2
  • 3