在 JavaScript 上添加/删除监听器(垃圾收集器)

2024-02-19

我有一个关于添加/删除 DOM 对象的侦听器的快速问题。 我想问垃圾收集器是否能够在从页面中删除元素时收集内存。

示例:一个<ul>带有几个孩子列表的标签(<li>)

var ul = document.getElementById('someParent');
var children = ul.children;
var someFunction = function() {};

for(var i = 0; i < children.length; i++) {
  children[i].addEventListener('click', someFunction);
}


// This is where I am not sure, would the garbage collector be able to collect
// the memory allocated on adding listener on children,
// if I remove the ul tag?
ul.remove();

线路ul.remove();将删除ulDOM 中的元素及其所有子元素。但是只要您引用了这些侦听器,事件侦听器的内存就不会被释放,li元素,以及ul元素。你确实有变量children, someFunction and ul.

如果你想让垃圾收集器清理所有这些,你可以这样做:

ul.remove();
children = null;
someFunction = null;
ul = null;

这样变量children不会保存对这些元素的引用,如果代码中没有任何其他变量来保存这些元素的引用,垃圾收集器将收集它们。这同样适用于someFunction。注意ul元素保存对其子元素和侦听器的所有引用,因此ul也必须清洁。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 上添加/删除监听器(垃圾收集器) 的相关文章

随机推荐

  • 如何以编程方式枚举 Azure 订阅和租户?

    如何以编程方式枚举 Azure 订阅和租户 这与我之前的问题有关 NET Azure SDK 中的登录 AzureRmAccount 及相关 等效项 https stackoverflow com questions 44619481 lo
  • 非最大化 matlab GUI 图

    有没有办法创建一个以最大化窗口启动的 GUI 我尝试添加set gcf Units normalized Position 0 0 1 1 在我的图形用户界面的末尾mygui OpeningFcn 功能 但 GUI 未正确最大化 请参阅打印
  • Woocommerce 按属性名称 asc 订购产品

    我在 Woocommerce 中有一个包含产品的自定义页面模板 但我想按属性的术语名称 asc 订购产品 我有三个任期 我不知道正确的方法 我尝试过
  • 无法将本地jar提交到spark集群:java.nio.file.NoSuchFileException

    spark spark 2 1 1 bin hadoop2 7 bin spark submit master spark 192 168 42 80 32141 deploy mode cluster file home me works
  • 如何在 Python 中使用自定义模块的 import 语句

    我对Python编程非常陌生 并且在Windows环境下使用Python 3 3编写简单的helloworld程序 helloworld程序保存为hello py 那么我如何在另一个模块中使用它呢 我尝试了 sys path append
  • 选中哪个单选按钮?

    我想检查哪个单选按钮被选中 然后 在我问这个问题之前 我查看了这里的问题 他们说代码 if document getElementById number1 checked 就是答案 但是 我收到错误 使用未定义的常量文档 假定 文档 并且
  • 流水线 sed 调用和多个 sed 表达式之间的效率有区别吗?

    我有一个关于 bash 中 sed 效率的问题 我有一系列管道化的 sed 语句 例如 var1 Some string of text var2 echo var1 sed s pattern1 replacement1 g sed s
  • 如何在运行时监控某些java方法分配的内存

    我正在创建一个 java 程序 其中我的类假设 A 有一些预定义的行为 但用户可以覆盖我的类来改变其行为 因此 我的脚本将检查是否存在某个子类 而不是我将其称为它的行为 但是如果他在代码中编写了一些阻塞代码或内存泄漏怎么办 这可能会损害我的
  • 在领域迁移期间创建领域对象

    您能够在迁移期间创建领域对象吗 我想要提取现有领域对象的一部分并使用该数据创建一个新对象 但迁移总是挂起 这是我的迁移代码 private class var migrationBlock MigrationBlock return mig
  • 是否可以从 Chromium 扩展中禁用 Flash 插件?

    我知道可以手动禁用 Chromium 中的 Flash 插件 只需转到 chrome plugins 找到 Adobe Flash Player 并将其禁用即可 我想知道是否可以使用 JavaScript 代码或扩展中的任何客户端脚本语言来
  • ASP.NET 图片上传并调整大小

    我有一个 aspx 页面 它将图像从客户端电脑上传到服务器硬盘 但现在我需要更改我的程序 以便我可以在上传时调整图像大小 有人对此有任何想法吗 我无法使用输入文件服务器控件找到此类属性 方法 有人指导我吗 将文件保存到服务器后 您可以使用这
  • Laravel 中的关系和 Blade

    我有 3 个表 如下所述 Table 1 user id username password Name Age Table 2 tasks id task name description Table 3 logs id user id t
  • 重写继承的抽象类中的抽象方法

    好吧 基本上我有以下问题 我试图让一个抽象类继承另一个具有抽象方法的抽象类 但我不想在它们中的任何一个中实现抽象方法 因为第三个类继承了两个类其中 public abstract class Command public abstract
  • 如何分析本机 JNI 库

    如何分析用 C 编写的 Java 本机接口库 我了解常用的 C 分析器 但我的问题是如何分析whole设置包括对 JVM 方法的调用 这可能会减慢程序速度 经过对这里提出的一些方法的一些研究和测试后 我最终使用了sprof 基本上我遵循了可
  • dotnetcore 中的服务结构客户端身份验证 UserPasswordCredential 不起作用

    我正在 aspnetcore dotnetcore2 0 应用程序中构建一个小型服务结构维护 但现在无法识别 UserPasswordCredential 类 从here https github com AzureAD azure act
  • 如何检测设备上是否存在Android Market?

    有些Android设备没有Android Market 例如韩国等 是否可以在运行时检测Android Market的存在 我知道我可以先尝试打开一个市场 uri 看看是否有抛出任何异常 但我认为这不是一个明智的做法 我知道我可以尝试打开一
  • Unicode 代码页 1200 到底是什么?

    在研究一些本地化选项时 我偶然发现它是 Visual Studio 中的保存选项 Unicode 代码页 1200 到底是什么 微软文档页面代码页标识符 https learn microsoft com en us windows win
  • 使用 printf 格式在 C 中打印等宽列

    我想在 C 中使用 printf 打印列 我编写了以下代码 include
  • didReceiveRemoteNotification:fetchCompletionHandler:从图标打开与推送通知

    我正在尝试实现后台推送通知处理 但在确定用户是否从发送的推送通知打开应用程序而不是从图标打开应用程序时遇到问题 void application UIApplication application didReceiveRemoteNotif
  • 在 JavaScript 上添加/删除监听器(垃圾收集器)

    我有一个关于添加 删除 DOM 对象的侦听器的快速问题 我想问垃圾收集器是否能够在从页面中删除元素时收集内存 示例 一个 ul 带有几个孩子列表的标签 li var ul document getElementById someParent