2

1 つのイベントに対する JavaScript のイベント ハンドラーは、FIFO、LIFO、または並列で発生しますか?

4

3 に答える 3

4

とても簡単です。DOMレベル2イベントモジュールは、イベントリスナーが起動される順序を指定しません。ただし、DOMレベル3イベントモジュールは、登録と同じ順序を指定します

最初に登録—最初に解雇されました。

DOMレベル3イベントモジュールはまだドラフトであるのに対し、レベル2は推奨であることに注意してください。それにもかかわらず、最近のブラウザは、古いレベル2の仕様ではなく、まさにこのドラフトのレベル3仕様のセマンティクスに従うことがよくあります。

実際には、IIRCでは、IEだけがイベントリスナーの順序を尊重しません。他のすべてのブラウザーは、FIFOとして(およびDOM L3イベントで説明されているように)それを実装します。オンラインで関連するテストを見つけることもできます:)

于 2009-10-11T06:57:08.333 に答える
3

JavaScript のシングル スレッドの性質により、イベントとタイマーはキューに入れられ、一度に 1 つずつ順番に実行されます。実行に空きがある場合に実行されます。

これは、図で最もよく示されています。

イベントとタイマー

最初のブロックが実行を終了した後、Mouse Click CallbackTimerの 2 つの非同期イベントが待機しています。この例では、ブラウザーはMouse Clickを選択し、タイマーは実行のために次の可能な時間まで待機します。

John Resig によるタイマーとイベントに関するこの非常に優れた記事を確認してください。

于 2009-10-10T14:50:49.907 に答える
0

PPK には、イベント バブリングとイベント キャプチャに関する優れた記事があります。

http://www.quirksmode.org/js/events_order.html

于 2009-10-10T15:50:43.933 に答える