触发功能似乎是同步的。也就是说,所有绑定的函数似乎都是按顺序同步执行的(被调用的函数可能会异步执行某些操作,但这不是问题)。
对于自定义和非自定义(单击、悬停等)事件是否如此?是否有任何 Javascript 的单线程保证不成立的事件?
如果是这样,是否可以更改行为以异步执行它们而不在每个绑定函数中插入超时?
这是一个演示问题的示例:
var ele = $('#blah');
// Example of the bound function doing something synchronously
ele.bind('customEvent.sync', function() {
// Do something synchronously
window.foo = 'foo';
});
// Example of the bound function doing something asynchronously
ele.bind('customEvent.async', function() {
window.setTimeout(function() {
// Do something asynchronously
window.bar = 'bar';
}, 0);
});
// Trigger both events
ele.trigger('customEvent');
// If trigger is guaranteed to be synchronous this should alert 'foo:undefined' or possibly 'foo:bar' depending on whether the asych function was called first
// If trigger is NOT synchronous 'undefined:undefined', 'foo:undefined', 'undefined:bar', or 'foo:bar' could be alerted
alert(window.foo + ':' + window.bar);
更新 请参阅:JavaScript 是否保证是单线程的? 由于 Javascript 的单线程特性,自定义事件可以保证是同步的。由于浏览器不一致,某些内置事件类型可能不同步。