我有一个点击监听器:
document.getElementById("addData").addEventListener("click", addData);
如果在实际点击之前我拍摄内存快照并在对象中查找UIEvent,它就不存在了。但点击后,如果我拍摄另一个快照并通过分配的对象,我可以看到UIEvent和MouseEvent(本机js接口)。
问题是,为什么这些物体会留在记忆中?如果我在实际活动之前不需要它们,为什么我会在活动结束后需要它们呢?
答案 0 :(得分:0)
当您点击某处时,浏览器会在内部调用new MouseEvent("click");
,就像您以编程方式创建"虚拟点击一样#34}。在页面上。当您点击页面时,此代码将执行相同的操作,但它已明确完成:
var evt=new MouseEvent('click');
document.dispatchEvent(evt);
MouseEvent
继承自UIEvent
,因此两个构造函数都被调用:
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中获取有关内存管理和垃圾收集的更多信息。