我有一个Custom Element类,它在createdCallback中创建了一个变异观察器。从来没有调用observer.disconnect()
。这会导致内存泄漏吗?如果是这样,你会如何推荐处理它?</ p>
这是一个基本的例子:
class SomeElement extends HTMLElement {
createdCallback() {
// Observe nodes in the future.
const observer = new MutationObserver(changes => {
for (let change of changes) {
if (change.type != 'childList') continue
for (let node of change.addedNodes)
this.childConnectedCallback(node)
for (let node of change.removedNodes)
this.childDisconnectedCallback(node)
}
})
observer.observe(this, { childList: true })
}
childConnectedCallback(node) {
// ...
}
childDisconnectedCallback(node) {
// ...
}
}
答案 0 :(得分:1)
如果垃圾收集器设计得很好,它不应该有内存泄漏。当自定义元素本身被删除时,将会处理变异观察者。
无论如何,您始终可以使用observer.disconnect()
方法拨打detachedCallback()
。在这种情况下,请使用this.observer
代替const observer
来保留引用。