1 つのイベントに対する JavaScript のイベント ハンドラーは、FIFO、LIFO、または並列で発生しますか?
3 に答える
とても簡単です。DOMレベル2イベントモジュールは、イベントリスナーが起動される順序を指定しません。ただし、DOMレベル3イベントモジュールは、登録と同じ順序を指定します 。
最初に登録—最初に解雇されました。
DOMレベル3イベントモジュールはまだドラフトであるのに対し、レベル2は推奨であることに注意してください。それにもかかわらず、最近のブラウザは、古いレベル2の仕様ではなく、まさにこのドラフトのレベル3仕様のセマンティクスに従うことがよくあります。
実際には、IIRCでは、IEだけがイベントリスナーの順序を尊重しません。他のすべてのブラウザーは、FIFOとして(およびDOM L3イベントで説明されているように)それを実装します。オンラインで関連するテストを見つけることもできます:)
JavaScript のシングル スレッドの性質により、イベントとタイマーはキューに入れられ、一度に 1 つずつ順番に実行されます。実行に空きがある場合に実行されます。
これは、図で最もよく示されています。
最初のブロックが実行を終了した後、Mouse Click CallbackとTimerの 2 つの非同期イベントが待機しています。この例では、ブラウザーはMouse Clickを選択し、タイマーは実行のために次の可能な時間まで待機します。
John Resig によるタイマーとイベントに関するこの非常に優れた記事を確認してください。
PPK には、イベント バブリングとイベント キャプチャに関する優れた記事があります。