代码之家  ›  专栏  ›  技术社区  ›  murvinlai

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

  •  4
  • murvinlai  · 技术社区  · 15 年前

    因此,如果在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.
      }
    

    所以,DOM对象, <div> 里面 body 他走了。但是你的孩子呢 eventlistener ? 我只是担心它会导致内存泄漏。

    2 回复  |  直到 15 年前
        1
  •  2
  •   Akidi    15 年前

    遗憾的是,W3C没有一个事件集合,您可以在其中筛选应用于单个元素的所有事件。你可以手动操作(即。目标事件= {}; 目标事件[类型]=[];目标事件[type].push(fn),用于添加的每个事件。Event[types]是一个数组,因此如果您希望一次触发多个函数,则可以逐个移除每个函数),然后通过目标事件对象以在删除对象之前删除所有事件。

        2
  •  0
  •   Luca Matteis    15 年前

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

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

    所以不会,不会造成内存泄漏。