基本的に、はい、同期です。
ソースからの関連セクションは次のとおりです。
trigger: function(name) {
if (!this._events) return this;
var args = slice.call(arguments, 1);
if (!eventsApi(this, 'trigger', name, args)) return this;
var events = this._events[name];
var allEvents = this._events.all;
if (events) triggerEvents(this, events, args);
if (allEvents) triggerEvents(this, allEvents, arguments);
return this;
},
インポート関数はtriggerEvents
で、実際にハンドラを呼び出します。コメントによると、これは単なる最適化されたディスパッチャーです。.call()
これらはすべてandを呼び出していることに注意してください。その.apply()
ため、呼び出し元に制御が返される前にコールバックが完了します。
var triggerEvents = function(obj, events, args) {
var ev, i = -1, l = events.length;
switch (args.length) {
case 0: while (++i < l) (ev = events[i]).callback.call(ev.ctx);
return;
case 1: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0]);
return;
case 2: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0], args[1]);
return;
case 3: while (++i < l) (ev = events[i]).callback.call(ev.ctx, args[0], args[1], args[2]);
return;
default: while (++i < l) (ev = events[i]).callback.apply(ev.ctx, args);
}
};
ただし、他の人が述べたように、トリガー ハンドラーは、必要に応じて独自のコールバックを自由にスケジュールできます。したがって、ハンドラーが戻る前に作業を終了するかどうかは、ハンドラー コード自体に依存します。