回到课程

哪一个处理器会运行?

重要程度: 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.onclick 独立于 addEventListener 之外工作。