考虑以下两种方法在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.remove(),这些方法中的任何一种会导致内存泄漏(或者这两种方法中的任何一种更有可能导致内存泄漏)?

如果我理解正确的话,$element.remove()方法也应该 destruct 元素上的事件侦听器,我假设如果调用destroy,应该不会发生内存泄漏.

另一方面,如果没有调用remove,那么只会从dom中删除$元素(比如说,销毁它的一个父元素并替换为另一个元素),会发生什么?

推荐答案

如果使用.html.empty.remove来"销毁"元素,jQuery会在内部删除元素及其子元素的所有数据和事件侦听器,以防止此类内存泄漏.

正如文档中所写的:

https://api.jquery.com/html/#html2

https://api.jquery.com/remove/

https://api.jquery.com/empty/

Jquery相关问答推荐

我正在try 使用 Jquery 打开与帖子相关的特定 comments

Jquery each - 停止循环并返回对象

我们如何在不重新加载页面的情况下使用 javascript/jQuery 更新 URL 或查询字符串?

了解 Backbone.js REST 调用

使用 jQuery 发送 JSON 数据

如何在 JavaScript 或 jQuery 中规范化 HTML?

在jQuery中添加ID?

使用 Typescript 时如何停止类型 JQuery 上不存在属性语法错误?

jQuery ajax (jsonp) 忽略超时并且不触发错误事件

如何签入用户已在 Google recaptcha 中选中复选框的 js?

如何让 JavaScript/jQuery Intellisense 在 Visual Studio 2008 中工作?

如何隐藏 Twitter Bootstrap 下拉菜单

数据表日期排序dd/mm/yyyy问题

jQuery从字符串中删除'-'字符

如何使用 javascript 擦除所有内联样式并仅保留 css 样式表中指定的样式?

如何使用 jQuery 删除 cookie?

jQuery empty() 与 remove()

在事件中使用 jQuery 获取被点击的元素?

在 jquery 中使用 AJAX Post 从强类型 MVC3 视图传递模型的正确方法

$(document).click() 在 iPhone 上无法正常工作. jQuery