如何实现removeEventListener?

时间:2016-07-19 12:55:58

标签: javascript dom

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

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

观察我的示例代码:

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

当我点击文档中的任意位置时,会弹出一个警告框并显示“你好!”。当我关闭警报框并再次单击文档中的任何位置时,没有任何反应。

我当然可以在同一个目标上为同一个事件注册多个侦听器。 我甚至可以注册多个同名的听众

它是如何运作的?

1 个答案:

答案 0 :(得分:1)

您无法判断两个不同的函数是否相同,但您可以判断两个变量是否引用相同的函数。这些是两个不同的概念:



 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方法有一个给定事件的事件处理程序列表,它可以通过它们并删除所需的事件