どのハンドラが実行されますか?
重要性: 5
変数の中にボタンがあります。そこにはハンドラはありません。
次のコードの後クリックするとどのハンドラが実行されるでしょう?どのアラートが表示されますか?
button.addEventListener("click", () => alert("1"));
button.removeEventListener("click", () => alert("1"));
button.onclick = () => alert(2);
答え: 1
と 2
.
最初のハンドラは実行されます、 removeEventListener
で削除されていないからです。 ハンドラを削除するには、割り当てたものと全く同じ関数を渡す必要があります。また、コード内に新しい関数が渡されます。これは同じように見えますが、別の関数です。
関数オブジェクトを削除するためには、このように参照を保持しなければなりません。:
function handler() {
alert(1);
}
button.addEventListener("click", handler);
button.removeEventListener("click", handler);
ハンドラ button.onclick
は addEventListener
に加えて、独立して動作します。