2016-07-19 40 views
0

根據另一個堆棧溢出問題「Are two functions equal?」,不可能驗證一個函數是否等於另一個函數。removeEventListener是如何實現的?

這讓我想知道如何實現target.removeEventListener(type, listener)

觀察我的示例代碼:「你好!」

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

當我在文檔中的任意位置單擊一個警告框彈出,讓我看看。當我關閉警告框並再次單擊文檔中的任何地方時,什麼都不會發生。

我當然可以在同一個目標上爲同一個事件註冊多個監聽器。 我甚至可以註冊多個同名的聽衆

它是如何工作的?

+0

你在這裏做的只是把一個參考引用到一個函數中。沒有功能比較正在進行,所以我不確定你在駕駛什麼。 – Utkanos

回答

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方法有一個給定事件的事件處理程序的列表,它可以直接通過他們去和拆除需要一個