`
darrenzhu
  • 浏览: 802180 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JavaScript的事件处理函数是同步执行的, 不是异步

阅读更多

特别提出一点, 触发事件并执行事件处理函数是一个同步过程,不是异步过程. 所以事件机制并不是异步的.如果你对这句话,有疑问, 请自行编写代码验证,以前我总认为事件机制异步的, 但不是, 如下所示,

function testSynchronousEventHandler() {
	var event1 = new CustomEvent("event1", {
		detail : {
			message : "event1 handler",
			time : new Date(),
		},
		bubbles : true,
		cancelable : true
	}), event2 = new CustomEvent("event2", {
		detail : {
			message : "event2 handler",
			time : new Date(),
		},
		bubbles : true,
		cancelable : true
	});

	this.addEventListener("event1", function(e) {
		console.log(e.detail.message);
	}, false);

	this.addEventListener("event2", function(e) {
		console.log(e.detail.message);
	}, false);

	this.dispatchEvent(event1);
	console.log('after event1')
	this.dispatchEvent(event2);
	console.log('after event2')
}


上面的代码在chrome里面的(IE9以下不支持customer event)执行结果是:
event1 handerl
after event1
event2 handler
after event2

绝对不会是: after event1 出现在event1 handler 前面, 因为事件触发是一个同步过程,不是触发了,先执行后面的代码,再执行事件处理函数里面的代码, Ajax的callback函数执行是异步的,那是因为需要与服务器打交道,所以js会先执行后面的代码,等ajax结果返回时,再执行callback函数里面的代码, 但是事件触发机制本身不是异步的.
0
0
分享到:
评论

相关推荐

    Nodejs让异步变成同步的方法

    需要注意的是,尽管co可以使异步代码看起来像是同步代码,但它实际上并没有阻塞事件循环,而是利用了JavaScript的单线程特性,在异步操作完成时才恢复函数的执行。 Node.js中的异步编程是个复杂但非常关键的主题,...

    异步函数同步_Make_an_asynchronous_function_synchronous_javascript

    1. **Web Worker**:Web Worker可以在后台线程中执行异步任务,但并不能真正实现同步,因为主线程仍然需要等待Worker完成后再继续执行。 2. **生成器(Generator)**:生成器配合yield关键字可以模拟同步行为,但...

    JavaScript异步编程g.pdf

    事件模式是另一种在JavaScript中处理异步操作的机制,它基于事件驱动的思想,当某个事件被触发时,会执行对应的事件处理函数。 Promises是现代JavaScript中处理异步操作的一个核心概念,它代表了一个尚未完成但预期...

    Javascript异步编程(英文版)

    早期的JavaScript主要是单线程同步执行的,但随着Ajax技术的出现,异步请求成为可能,开启了JavaScript异步编程的新篇章。近年来,随着ES6及更高版本的引入,JavaScript社区不断完善异步编程模型,使得异步编程变得...

    基于Javascript的异步编程分析.pdf

    1. 回调函数模型:使用回调函数来执行异步操作。 2. Promise模型:使用Promise来执行异步操作。 3. Async/Await模型:使用Async/Await来执行异步操作。 异步编程的优点 异步编程有以下几个优点: 1. 提高用户体验...

    JavaScript ES6函数式编程入门经典_javascript_

    10. **async/await**:基于Promise,ES6引入了`async/await`语法,使得异步代码看起来像同步代码一样执行,提高了代码的可读性和可维护性。 以上就是JavaScript ES6函数式编程的一些核心知识点,理解并熟练运用这些...

    《JavaScript异步编程》PDF版本下载.txt

    综上所述,《JavaScript异步编程》这本书详细介绍了JavaScript中异步编程的各种技术和最佳实践,包括但不限于回调函数、事件循环、Promise、async/await等核心概念和技术。通过学习本书,读者可以更好地理解和掌握...

    JavaScript回调函数面试题.zip

    JavaScript回调函数是JavaScript异步编程的核心机制之一,它在处理事件、网络请求、定时任务等方面发挥着重要作用。本文将深入探讨JavaScript回调函数的概念、特点、使用场景以及面试中常见的问题。 **1. 回调函数...

    JavaScript设计模式+JavaScript模式+JavaScript异步编程

    - 事件监听:通过事件监听和触发来处理异步操作。 - Promise:解决回调地狱,提供链式调用,但仍有回调陷阱。 - Generator:通过yield关键字实现异步流程控制,配合co库使用。 - async/await:基于Promise,提供...

    同步方法和异步方法比较

    在编程领域,同步和异步方法是处理任务执行方式的两种基本模式,它们在系统设计和性能优化中扮演着至关重要的角色。理解这两者的区别及其优缺点对于开发高效的应用至关重要。 **同步方法**指的是调用一个函数或方法...

    javascript回调函数详解参考.docx

    在JavaScript中,回调函数通常用于处理异步操作,例如在Ajax请求、定时器(setTimeout和setInterval)或事件处理中。然而,回调函数并不局限于异步场景,它们也可以用于同步操作,如确保一个函数执行完毕后再执行另...

    Javscript高性能编程+Javascript异步编程

    1. **回调函数**:JavaScript的基础异步处理方式,但容易导致回调地狱,使得代码难以理解和维护。 2. **Promise**:为解决回调地狱而引入,提供了一种链式调用的方式,使异步代码更易读,但仍有回调问题。 3. **...

    从回调函数到 AsyncAwait:JavaScript 异步编程进阶指南.pdf

    - **定义**:回调函数是在另一个函数执行完毕之后被调用的函数,用于处理异步操作的结果。 - **优点**: - 容易理解和实现。 - **缺点**: - 回调地狱(Callback Hell):多个嵌套的回调函数使得代码难以阅读和...

    深入理解JavaScript异步

    在这个教程中,我们将探索JavaScript异步处理的各个方面,包括事件循环、回调函数、Promise、Async/Await以及generator等。 首先,我们来了解异步编程的基本原理。在JavaScript中,由于其单线程的执行模型(即所谓...

    浅析JavaScript回调函数应用_.docx

    回调函数不仅限于异步操作,同步场景下同样适用,例如在一个操作完成后需要执行的后续处理。 例如,下面的代码展示了如何在函数func1执行完毕后调用func2: ```javascript var func1 = function(callback) { // ...

    JavaScript 中的异步模式【APICloud教程】

    为了处理耗时操作而不阻塞主线程,JavaScript引入了异步执行模型。 首先,我们要理解同步和异步的区别。同步模式就像排队买票,队伍中的每个人都必须按照顺序等待前一个人完成操作才能进行下一个。在这种模式下,...

    Javascript函数帮助手册

    综上所述,"JavaScript函数帮助手册"涵盖了函数的定义、参数、返回值以及与时间对象相关的各种操作,包括日期的获取和设置、时间的格式化、时间差计算,还涉及到了定时器、事件处理以及异步编程等重要概念。...

    js 异步操作回调函数如何控制执行顺序

    异步操作通常通过回调函数来处理,但控制这些回调函数的执行顺序是一个挑战。本文将详细讨论如何在JavaScript中控制异步操作回调函数的执行顺序。 首先,我们需要理解JavaScript的单线程特性。尽管JavaScript是单...

    以同步方式编写异步代码_WriteAsynchronousCodeAsIf it'sSynchronous_javascript

    在JavaScript编程中,异步处理是至关重要的,尤其是在处理I/O操作、网络请求或定时任务时。传统的异步编程模型,如回调函数、事件监听器和Promise,虽然能解决这些问题,但它们的语法和逻辑往往使得代码变得复杂,...

Global site tag (gtag.js) - Google Analytics