トリガー機能は同期しているように見えます。つまり、バインドされたすべての関数が順番に同期して実行されているように見えます(呼び出された関数は非同期で何かを実行する場合がありますが、それは問題ではありません)。
これは、カスタムイベントと非カスタム(クリック、ホバーなど)イベントに当てはまりますか?Javascriptのシングルスレッド保証が当てはまらないイベントはありますか?
trueの場合、バインドされた各関数にタイムアウトを挿入せずに非同期で実行するように動作を変更できますか?
これが質問を示すサンプルです:
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はシングルスレッドであるため、カスタムイベントは同期することが保証されています。一部の組み込みイベントタイプは、ブラウザの不整合が原因で同期されない場合があります。