JavaScript中事件处理程序的异步或同步调用

23
事件处理程序在JavaScript中是同步执行还是异步执行? 这里有一个JS bin,它显示事件处理程序是同步执行的。
代码:
$('#toclick').bind('custom', function() {
    for (var i=0; i<100000; i++) {}
    console.log('Inside click handler');
});

$('#toclick').trigger('custom');
console.log('Outside click handler');

输出:

Inside click handler
Outside click handler

这意味着如果我们触发了一个事件,下面的代码不会被执行,除非所有的事件处理程序都被执行。我理解得对吗?

带有多个事件处理程序的 Bin 实例


2
所有事件都是同步的。您可能还想了解事件传播http://www.quirksmode.org/js/events_order.html。 - Ejaz
2个回答

21

没错。所有的事件处理程序都会同步触发,并按照绑定顺序执行。


谢谢你,freakish!我刚刚有点困惑。感谢你的澄清。 - Sachin Jain
1
你对某些事件处理程序同步执行,而其他则异步执行有什么想法? - xianshenglu
3
@xianshenglu 有一个误解。一旦触发事件,所有绑定到它的处理程序会同步运行。但是事件(例如load)可以异步触发。因此,处理程序始终是同步的,而事件本身则不需要。请注意,trigger函数会同步触发事件。 - freakish

11

一些事件处理程序是同步执行的,另一些是异步执行的。请参见DOM-Level-3-Events


3
感谢提供有用的信息。顺便说一下,仅提供链接的回答是不被鼓励的,请尝试在回答中提供更多信息。无论如何感谢你! - Sachin Jain

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接