根据另一个stackoverflow问题“ Are two functions equal?”,无法验证一个函数是否等于另一个函数。

这让我想知道target.removeEventListener(type, listener)是如何实现的。

观察我的示例代码:

function eventHandler() {
    alert("hello!");
    document.removeEventListener("click", eventHandler);
}
document.addEventListener("click", eventHandler);


当我单击文档中的任意位置时,将弹出一个警告框,提示我“你好!”。当我关闭警报框并再次单击文档中的任意位置时,什么也没有发生。

我当然可以在同一事件的同一目标上注册多个侦听器。我什至可以注册多个具有相同名称的侦听器。

它是如何工作的?

最佳答案

您无法确定两个不同的函数是否等效,但是可以判断两个变量是否引用了同一函数。这些是2个不同的概念:



 function add(a,b) {
   return a+b;
 }
 function add2(a,b) {
   return a+b;
 }

 var myAddFn=add;

 console.log(myAddFn===add) //true
 console.log(myAddFn===add2) //false





然后,如果removeEventListener方法具有给定事件的事件处理程序列表,则只需遍历它们并删除所需的事件处理程序即可。

关于javascript - 如何实现removeEventListener?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38459256/

10-10 23:55