2016-01-18 54 views
0

後沒有被清除我有一個點擊監聽器:本地的UIEvent()事件結束

document.getElementById("addData").addEventListener("click", addData);

如果實際點擊我把內存快照和尋找的UIEvent內部對象之前,它不存在。但是,點擊後,如果我拍攝另一張快照並通過分配的對象,我可以看到UIEvent和MouseEvent(原生js接口)。

現在的問題是,爲什麼這些對象保存在內存中?如果我在實際事件之前不需要它們,爲什麼在事件結束後我需要它們?

回答

0

當你點擊某個地方,在瀏覽器內部調用new MouseEvent("click");,你會編程方式創建一個「虛擬點擊」頁面上以同樣的方式。此代碼將做同樣的事情,當你點擊頁面上,但它明確地做:從UIEvent

var evt=new MouseEvent('click'); 
document.dispatchEvent(evt); 

MouseEvent繼承所以無論構造函數的調用:

document.addEventListener("click",function(evt){ 
console.log("evt instanceof MouseEvent :",evt instanceof MouseEvent); 
console.log("evt instanceof UIEvent :",evt instanceof UIEvent); 
}); 

本次活動將作爲垃圾收集,如果一段時間後沒有提及它。您可以在Mozilla Developer Network上的javascript中獲得有關內存管理和垃圾回收的更多信息。

+0

謝謝你的回覆,但我知道聽衆留在記憶裏。問題在於,爲什麼特定的UIEvent和MouseEvent在事件結束後不會出現在實際事件發生之前? – jvrnt

+0

我不是在談論聽衆,而是事件對象本身。 evt這裏是鼠標事件和UIEvent的一個實例,在我的代碼中,我將事件保存在內存中,因爲在window對象上有一個引用。 – n00dl3

+0

當你點擊某處你正在監聽的「點擊」事件時(不確定是否需要監聽)瀏覽器內部調用'new MouseEvent(「click」);' – n00dl3

相關問題