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

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

所以,DOM 对象,<div>里面body离开了。但是eventlistener呢? ? 我只是担心它会导致内存泄漏。

最佳答案

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

关于javascript - 如果附加了事件,删除 DOM 对象(在 Javascript 中)是否会导致内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2996030/

相关文章:

javascript - 使用 styleTween 进行带百分比的 d3 过渡

javascript - 有没有办法在关闭浏览器时终止 session ?我使用了 onunload 和 onbeforeunload 事件。但它不起作用

javascript - 如何在容器或表面内添加图像以产生视差

memory-leaks - 为什么使用getImageData泄漏内存

javascript - ionic 应用程序中的计时器(setInterval)在后台运行一段时间后进入休眠状态

javascript - Mongoose 保存是异步的吗?

javascript - 如何从javascript中的select标签中获取值

javascript - 获取对父 IFRAME 的引用

ruby-on-rails - 如何追踪 Rails 应用程序中的内存泄漏?

javascript - 计算所有正在使用的对象和变量