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

时间:2010-06-08 09:12:31

标签: 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 = 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.
  }

因此,<div>内的DOM对象body消失了。但是eventlistener呢? 我只是害怕它会导致内存泄漏。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

JavaScript会自动为您执行垃圾回收。

它可能会立即释放它,或者它可能会在最佳时刻等待。这取决于JavaScript实现。

所以不,它不会导致内存泄漏。