如果DOM对象(在Javascript中)附加了事件,那么删除它是否会导致内存泄漏?

如果DOM对象(在Javascript中)附加了事件,那么删除它是否会导致内存泄漏?,javascript,dom,memory-leaks,event-listener,Javascript,Dom,Memory Leaks,Event Listener,因此,如果在javascript中,我在HTML页面中创建了一个DOM对象,并将事件侦听器附加到DOM对象,那么当我从HTML页面中删除DOM时,事件侦听器是否仍然存在并导致内存泄漏 function myTest() { var obj = document.createElement('div'); obj.addEventListener('click', function() {alert('whatever'); }); var body = docu

因此,如果在javascript中,我在HTML页面中创建了一个DOM对象,并将事件侦听器附加到DOM对象,那么当我从HTML页面中删除DOM时,事件侦听器是否仍然存在并导致内存泄漏

  function myTest() {
     var obj = document.createElement('div');
     obj.addEventListener('click', function() {alert('whatever'); });
     var body = document.getElementById('body'); // assume there is a <div id='body'></div> already
     body.appendChild(obj);
  }

  // then after some user actions. I call this:
  function emptyPage() {
    var body = document.getElementById('body');
    body.innerHTML = '';  //empty it.
  }
函数myTest(){
var obj=document.createElement('div');
addEventListener('click',function(){alert('whatever');});
var body=document.getElementById('body');//假设已经存在
附肢儿童(obj);
}
//然后在一些用户操作之后。我称之为:
函数emptyPage(){
var body=document.getElementById('body');
body.innerHTML='';//将其清空。
}
因此,DOM对象,
内部的
主体
不见了。但是
eventlistener
呢?
我只是担心它会导致内存泄漏

JavaScript会自动为您执行垃圾收集

它可能会立即释放它,也可能会等到最好的时机。这取决于JavaScript实现


因此,不,它不会导致内存泄漏。

遗憾的是,W3C没有一个事件集合,您可以在其中筛选应用于单个元素的所有事件。您可以手动执行此操作(即,对于添加的每个事件,obj.Events={};obj.Events[type]=[];obj.Events[type].push(fn))。事件[types]是一个数组,因此如果您希望一次触发多个函数,则可以分别删除每个函数),然后循环访问obj.Events对象,在删除对象之前删除所有事件。

因为我以前在操作脚本中遇到内存泄漏问题。情况是,当我从DOM树中删除Flash嵌入对象时,侦听器仍然处于活动状态。这就是为什么我甚至担心从HTML中删除DOM,侦听器仍然活着…Lucas,你确定吗?我已经在很多地方寻找了一个确切的答案:是的,不是,什么浏览器?我发现的只是矛盾。