【发布时间】:2019-03-18 16:48:59
【问题描述】:
jQuery 的 .empty() 方法是否会移除通过
附加的监听器var e = () => { ... };
element.addEventListener('click', e);
以及或只是通过附加的那些
var e = () => { ... };
$(element).on('click', e);
我正在考虑这里的内存泄漏:如果我在 DOM 中动态创建了元素,这些元素还附加了事件侦听器,并且我想再次从 DOM 中删除这些元素 - 是吗
- 要么必须从我想使用 removeEventListener() 手动删除的每个节点中删除每个侦听器
- 还是必须使用像 jQuery 这样的库来分别使用 .on() 和 .empty() 添加和删除监听器?
据我了解this question,动态添加和删除具有事件侦听器的元素不会清除所有引用,因此会导致这些元素保留在内存中。
var element = document.createElement('div');
var handler = function() {
alert('foo');
};
document.body.appendChild(element);
// Option 1
element.addEventListener('click', handler);
document.body.innerHTML = '';
// Option 2
element.addEventListener('click', handler);
$(document.body).empty();
// Option 3
$(element).on('click', handler);
$(document.body).empty();
哪个选项不仅完全从 DOM 中删除元素,而且完全释放其内存?不幸的是,使用 removeEventListener 对我来说并不实用......
【问题讨论】:
标签: javascript jquery events memory-leaks event-listener