回到课程

哪个处理程序会运行?

重要程度: 5

在变量中有一个按钮。它上面没有处理程序。

执行以下代码之后,哪些处理程序会在按钮被点击时运行?会显示哪些 alert?

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);

无论 addEventListener 怎样,button.onclick 处理程序都会触发。