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

Posted

技术标签:

【中文标题】javascript中事件处理程序的异步或同步调用【英文标题】:Asynchronous or Synchronous calling of event handlers in javascript 【发布时间】:2013-04-02 04:27:59 【问题描述】:

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 with multiple event handlers

【问题讨论】:

所有事件都是同步的。您可能还想查看事件传播quirksmode.org/js/events_order.html 【参考方案1】:

没错。所有事件处理程序都是按绑定顺序同步触发的。

【讨论】:

非常感谢!刚弄糊涂了。感谢您的澄清。 你觉得Some event handlers are executed synchonously and others asynchronously.怎么样? @xianshenglu 有点混乱。一旦触发事件,所有绑定到它的处理程序都会同步运行。但是事件(例如加载)可以异步触发。所以处理程序总是同步的。而事件本身不需要。注意trigger函数同步触发事件。【参考方案2】:

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

【讨论】:

感谢您提供有用的信息。在旁注中,不鼓励仅链接答案。请尝试在答案中添加更多信息。无论如何,谢谢!

以上是关于javascript中事件处理程序的异步或同步调用的主要内容,如果未能解决你的问题,请参考以下文章

进阶学习5:JavaScript异步编程——同步模式异步模式调用栈工作线程消息队列事件循环回调函数

java中异步处理和同步处理分别是啥意思

立即从同步代码执行异步回调

同步异步和Event loop事件循环

异步回调函数

浏览器中的JavaScript事件循环机制