当前位置:首页 > 开发 > Web前端 > JavaScript > 正文

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

发表于: 2014-03-12   作者:darrenzhu   来源:转载   浏览:
摘要: 特别提出一点, 触发事件并执行事件处理函数是一个同步过程,不是异步过程. 所以事件机制并不是异步的.如果你对这句话,有疑问, 请自行编写代码验证,以前我总认为事件机制异步的, 但不是, 如下所示, function testSynchronousEventHandler() { var event1 = new CustomEvent("event1", {

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

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函数里面的代码, 但是事件触发机制本身不是异步的.

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号