事件是异步还是同步?

初学前端的时候,资料上说事件是异步的。
根据 mdn 的描述也是异步的。

事件(Event)是指一种用于处理在网页的生命周期中发生的各种事件的异步调用的设计模式,也指一些不同种类事件的命名、描述和使用。

当时也不关心,会用就行。



后来,遇到了 HTMLElement.click

var dom = document.querySelector('xxx')
dom.addEventListener('click',function(){ console.log(' dom is clicked ') })

function test (){
    dom.click()
    console.log(' after dom.click() ')
}
test() // 'dom is clicked'  ' after dom.click() '

手动触发事件,事件触发到函数执行并不是异步的。

所以当时认为事件是同步的。



有ajax这样的 xhr的readyStateChange事件困扰我很久。

还是不清楚事件是异步还是同步。查了资料,也没明白。



我现在想的是,事件是一个过程:

  1. 行为触发 (异步)
  2. 事件处理 (同步)

这样就说的通了。

行为触发:什么时候用户点击、返回响应,这都是未知的也就是异步的。

事件处理:系统接收到事件触发,找到对应dom的回调函数、并执行的过程是同步的。

dom.click()直接触发,所以立即执行。

原文地址:https://www.cnblogs.com/AFu-1993/p/12319673.html

时间: 2024-10-25 09:13:44

事件是异步还是同步?的相关文章

js的事件循环机制:同步与异步任务(setTimeout,setInterval)宏任务,微任务(Promise,process.nextTick)

javascript是单线程,一切javascript版的"多线程"都是用单线程模拟出来的,通过事件循环(event loop)实现的异步. javascript事件循环 事件循环中的同步任务,异步任务: 同步和异步任务在不同的执行"场所",同步的进入主线程,异步的进入Event Table执行并注册函数. 当指定的异步事情完成时,Event Table会将这个函数移入Event Queue. 主线程内的任务执行完毕为空,会去Event Queue读取对应的函数,推

MSDN搬运 之 [基于事件的异步模式]

基于事件的异步模式概述 那些同时执行多项任务.但仍能响应用户交互的应用程序通常需要实施一种使用多线程的设计方案.System.Threading 命名空间提供了创建高性能多线程应用程序所必需的所有工具,但要想有效地使用这些工具,需要有丰富的使用多线程软件工程的经验.对于相对简单的多线程应用程序,BackgroundWorker 组件提供了一个简单的解决方案.对于更复杂的异步应用程序,请考虑实现一个符合基于事件的异步模式的类. 基于事件的异步模式具有多线程应用程序的优点,同时隐匿了多线程设计中固有

浅谈委托,事件,异步调用,回调等概率

直接说题. 委托         首先明确它是什么,其实就是一个类,定义一个委托即定义一个类,那么它是什么类?用来说明方法的类型的类.字段有类型,那么方法其实也有类型,就是委托.       委托是某一类方法的总定义.    事件           事件是某个类用于传递消息的方式.事件之余委托,犹如属性之余变量即是委托的封装.     好了,明确了概念,接下来说示例.    示例         有3个对象  鼠标,button,winform .鼠标点击button对象,触发button的c

非主流node.js异步转同步

异步转同步方案分类 说起nodejs的异步转同步,估计大家不陌生.因为nodejs回调实在太多了,稍微复杂一点的程序就会有很多层的回调嵌套.为了处理这些令人抓狂的回调,我们一般需要使用一些框架或工具将这些异步过程转换成相对比较容易理解的同步过程,也就是我们本文所说的异步转同步.而完成这种转换的工具或库大体上可以分为三类:1. 回调链管理类 2. 编译工具类 3. 底层实现修改类. 第一类是最工具常见的,以Promise.async为代表.这类工具一般需要调用一个方法将我们 的处理函数包裹然后进行

C#中的异步调用及异步设计模式(三)——基于事件的异步模式

四.基于事件的异步模式(设计层面) 基于事件的C#异步编程模式是比IAsyncResult模式更高级的一种异步编程模式,也被用在更多的场合.该异步模式具有以下优点: ·                  “在后台”执行耗时任务(例如下载和数据库操作),但不会中断您的应用程序. ·                  同时执行多个操作,每个操作完成时都会接到通知(在通知中可以区分是完成了哪个操作). ·                  等待资源变得可用,但不会停止(“挂起”)您的应用程序. ·  

阻塞、非阻塞、异步、同步以及select/poll和epoll

针对IO,总是涉及到阻塞.非阻塞.异步.同步以及select/poll和epoll的一些描述,那么这些东西到底是什么,有什么差异? 一般来讲一个IO分为两个阶段: 等待数据到达 把数据从内核空间拷贝到用户空间 现在假设一个进程/线程A,试图进行一次IO操作. A发出IO请求,两种情况: 1)立即返回 2)由于数据未准备好,需要等待,让出CPU给别的线程,自己sleep 第一种情况就是非阻塞,A为了知道数据是否准备好,需要不停的询问,而在轮询的空歇期,理论上是可以干点别的活,例如喝喝茶.泡个妞.

【温故知新】C#基于事件的异步模式(EAP)

在开发winform和调用asp.net的web service引用的时候,会出现许多命名为 MethodNameAsync 的方法. 例如: winform的按钮点击 this.button1.Click += new System.EventHandler(this.button1_Click); private void button1_Click(object sender, EventArgs e) { //dosomething } 这就是基于事件的异步编程模式,它实现了不影响主线程

异步编程(二)基于事件的异步编程模式 (EAP)

一.引言 在上一个专题中为大家介绍了.NET 1.0中提出来的异步编程模式--APM,虽然APM为我们实现异步编程提供了一定的支持,同时它也存在着一些明显的问题--不支持对异步操作的取消和没有提供对进度报告的功能,对于有界面的应用程序来说,进度报告和取消操作的支持也是必不可少的,既然存在这样的问题,微软当然也应该提供给我们解决问题的方案了,所以微软在.NET 2.0的时候就为我们提供了一个新的异步编程模型,也就是我这个专题中介绍的基于事件的异步编程模型--EAP. 实现了基于事件的异步模式的类将

Jsp页面中的异步与同步

"异步"请求是相对于"同步"请求而言的,很多操作都存在"异步"和"同步"一说, "同步" 的意思是说,你发起一个操作,程序需要一直等待,直到操作完成,程序才能继续执行进行下一步. 异步就是 你开始一个操作,程序在操作完成之前可以继续后续的工作,当操作完成后,触发事件或者使用回调来处理操作完成的手续.一般来说异步操作都是启动一个新的线程去处理你的请求,完成之后调用你指定的回调函数来完成整个异步操作. 1 &l