考虑以下两种在 jQuery 中执行相同操作的方法:
// Approach 1
const $element = jQuery(...);
$element.on('click', () => {
$element.addClass('ok');
});
// Approach 2
const $element = jQuery(...);
$element.on('click', (evt) => {
const $element = jQuery(evt.currentTarget);
$element.addClass('ok');
});
如果稍后在代码中的其他地方调用
$element.destroy()
,这些方法中的任何一个是否会导致内存泄漏(或者这两种方法中的任何一个更有可能导致内存泄漏)?
如果我理解正确,
$element.destroy()
方法也应该销毁元素上的事件侦听器,并且我认为如果调用destroy
,则不会发生内存泄漏。
另一方面,如果没有调用
destroy
,只会从 dom 中删除 $element (比如说,销毁它的一个父元素并用另一个元素替换它),会发生什么?
如果您使用
.html
、.empty
或 .remove
来“销毁”元素,jQuery 将在内部删除该元素及其子元素的所有数据和事件侦听器,以防止此类内存泄漏。