レッスンに戻る

どのハンドラが実行されますか?

重要性: 5

変数の中にボタンがあります。そこにはハンドラはありません。

次のコードの後クリックするとどのハンドラが実行されるでしょう?どのアラートが表示されますか?

button.addEventListener("click", () => alert("1"));

button.removeEventListener("click", () => alert("1"));

button.onclick = () => alert(2);

答え: 12.

最初のハンドラは実行されます、 removeEventListener で削除されていないからです。 ハンドラを削除するには、割り当てたものと全く同じ関数を渡す必要があります。また、コード内に新しい関数が渡されます。これは同じように見えますが、別の関数です。

関数オブジェクトを削除するためには、このように参照を保持しなければなりません。:

function handler() {
  alert(1);
}

button.addEventListener("click", handler);
button.removeEventListener("click", handler);

ハンドラ button.onclickaddEventListener に加えて、独立して動作します。