首页 > 编程语言 >[Javascript] Microtasks exec order

[Javascript] Microtasks exec order

时间:2023-06-02 21:24:21浏览次数:36  
标签:event listener console log microtask Javascript click Microtasks order

button.addEventListener(
    'click',
    (event) => {
        console.log('listener 1')
        queueMicrotask(() => {
            console.log('microtask')
        })
    }
)

button.addEventListener(
    'click',
    (event) => {
        console.log('listener 2')
    }
)

The order should be

listener 1
microtask
listener 2

 

For first click event task:

  • after finish console.log('listener 1'), callstack is empty
  • then because of callstack is empty, microtask will be executed
  • Then second click event will be added to callstack

 

But things got changed for dispatchEvent

button.addEventListener(
    'click',
    (event) => {
        console.log('listener 1')
        queueMicrotask(() => {
            console.log('microtask')
        })
    }
)

button.addEventListener(
    'click',
    (event) => {
        console.log('listener 2')
    }
)

button.dispatchEvent(new MouseEvent('click'))

Order:

listener 1
listener 2
microtask
  • dispatchEvent will stay, so the callstack is not empty
  • therefore first run listener 1
  • then listener 2
  • then microtask

标签:event,listener,console,log,microtask,Javascript,click,Microtasks,order
From: https://www.cnblogs.com/Answer1215/p/17452903.html

相关文章

  • 定时器(JavaScript)的使用
    前言通过定时器自动的做一些事情,例如发送网络请求一、定时器定时器:定时器可以设定时间自动的做某件事情。定时器是一种方法,不是对象,定时器属于window对象。二、定时器具体内容周期性定时器:间隔一定的时间,自动的做某件事情setInterval(函数名,间隔时间)一次性定时器:延迟多长时间做......
  • Spring核心接口之Ordered
    一、Ordered接口介绍Spring中提供了一个Ordered接口。从单词意思就知道Ordered接口的作用就是用来排序的。Spring框架是一个大量使用策略设计模式的框架,这意味着有很多相同接口的实现类,那么必定会有优先级的问题。于是Spring就提供了Ordered这个接口,来处......
  • unordered_map、unordered_set使用
    unordered_map头文件#include<iostream>#include<unordered_map>usingnamespacestd;增删查改unordered_map底层实现为哈希表,增删效率与查找效率都是O(1)增加元素emplace(key,value)insert(pair<T,T>p)数组修改法//unordered_map三种增加元素的方式// insert(......
  • JavaScript中的循环(6个)
    LoopesforwhiledowhileforofforEachforin1.forfor(initialization,condition,increment/decrement){//codegoeshere}eg:for(leti=0;i<6;i++){console.log(i)}2.whileUsingthewhileloopwhenwedonotknowhowmanitera......
  • JavaScript 基础知识总结
    概述JavaScript基础分为三个部分:ECMAScript:JavaScript的语法标准。包括变量、表达式、运算符、函数、if语句、for语句等。DOM:DocumentObjectModel(文档对象模型),操作页面上的元素的API。比如让盒子移动、变色、改变大小、轮播图等等。BOM:BrowserObjectModel(浏览器对象模型),操......
  • javascript设计模式-责任链
    责任链可以用来消除请求的发送者和接收者之间的耦合,这是通过实现一个由隐式地对请求进行处理的对象组成的链而做到的。链中的每个对象可以处理请求,也可以将其传给下一个对象。JS内部就使用了这种模式来处一事件捕获和冒泡问题。一般的结构如下:发送者知道链中的第一个接收者,它向这个......
  • z-index控制层级显示【JavaScript-Dom&Bom】
    溢出设置overflowvisible(默认)超出部分显示hidden超出部分隐藏scroll超出部分滚动显示行内元素垂直对齐方式vertical-alignbaseline基线对齐(默认)top上对齐middle中间对齐bottom下对齐控制显示层级当元素为非static定位时,可能出现层叠......
  • JS垃圾回收——和其他语言一样,JavaScript 的 GC 策略也无法避免一个问题:GC 时,停止响应
    JavaScript内存管理&垃圾回收机制标记清除js中最常用的垃圾回收方式就是标记清除。当变量进入环境时,例如,在函数中声明一个变量,就将这个而变量标记为“进入环境”。从逻辑上讲,永远不能释放进入环境的变量所占用的内存,因为只要执行流进入相应的环境,就可能会用到它们。而当变量离......
  • jQuery 是javascript的一个库(常用插件、处理器)
    jQuery校验官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validationjQuery就是javascript的一个库,把我们常用的一些功能进行了封装,方便我们来调用,提高我们的开发效率。极大地简化了JavaScript编程。Javascipt跟jQuery的区别:Javascript是一门编程语言,我们用......
  • JavaScript原生实现《贪吃蛇》
    概述JavaScript原生实现《贪吃蛇》,每吃掉一个食物,蛇的身体会变长,食物会重新换位置。详细贪吃蛇大家都不陌生吧~简单做一个。一、思路1.让我们的小蛇动起来2.随机生成食物3.每吃掉一个食物,蛇的身体会变长,食物会重新换位置html界面<divclass="face"><!--小蛇移......