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

你可能感兴趣的:(JavaScript,事件,异步,同步,处理)