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