我有一个点击监听器:
document.getElementById("addData").addEventListener("click", addData);
如果在实际单击之前,我获取一个内存快照,并在对象中查找UIEvent,则它不存在。但是单击后,如果我拍摄另一张快照并遍历分配的对象,我可以看到UIEvent和MouseEvent (本地js接口)。
问题是,为什么那些物体被保存在记忆中?如果我在实际活动之前不需要他们,为什么在活动结束后我会需要他们?
发布于 2016-01-18 10:58:04
当您单击某个位置时,浏览器内部调用new MouseEvent("click");,这与编程在页面上创建“虚拟单击”的方式相同。这段代码将执行相同的操作,就像单击页面时一样,但它是显式完成的:
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开发人员网络上的javascript中获得更多有关内存管理和垃圾收集的信息。
https://stackoverflow.com/questions/34852947
复制相似问题