Javascript 中如何检测对象是否已被垃圾回收?

2023-12-31

我正在构建一个 JavaScript 游戏,它创建一个Level使用 var 的对象:

function start() {
   var myGameLevel = new Level(2);
}

This Levelobject 有很多功能,主要是向 DOM 添加元素并使它们具有交互性。一个简化:

function Level(i) {
    var _difficulty = i;
            
    this.init = function(){
         jQuery("#container").append(...game elements here...);
         jQuery("#button").on('click', function() {...});
    }
}

我的问题:我怎样才能知道Level中创建的对象start函数是否已被垃圾回收?我的目标是只使用var变量,以便没有外部引用。当 DOM 中的所有游戏元素被清除时,我希望Level对象将从内存中释放,但我如何确定?


通常,JavaScript 中的垃圾收集是不确定的。您无法知道对象是否或何时被垃圾收集。这适用于强引用的对象。

在 ES12 及之后的版本中,您可以使用FinalizationRegistry https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry.

终结器允许您使用 JavaScript 回调来处理对象何时被垃圾回收。但限制在于,回调何时执行是不确定的。可能需要一分钟或一个小时。

// object creation
let abc = new Array(200).fill(true);

const cleanup = new FinalizationRegistry(key => {
  // your code here
});

// tagging variable abc to finalizer
cleanup.register(abc, 'werwer');

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

Javascript 中如何检测对象是否已被垃圾回收? 的相关文章

  • 禁用内容安全策略

    当我开发网站时 我经常想看看特定功能在网站上的外观如何 所以我会使用 chrome 开发者工具并经常运行一些 javascript 脚本 我经常发现一些脚本由于内容安全策略 CSP 而无法运行的问题 我完全理解该策略是为了防止跨站点脚本攻击
  • 我如何在 AngularJS 中监听点击并按住的情况?

    我制作了一个时间计数器 您可以通过单击按钮来增加或减少时间 然而 我希望当我单击并按住按钮时 时间的价值会不断攀升 所以目前如果你看到我的Plunkr http plnkr co edit BxX9x5zYFMXVqt5JsN1F p pr
  • 访问sendBeacon发送的数据

    文档表明sendBeacon通过发送其数据HTTP POST request 但在 PHP 中 POST变量似乎是一个空数组 这是我的 JavaScript 代码 navigator sendBeacon beacon log php My
  • 动态速度计 javascript 或 jquery 插件

    我希望有动态ajax插件在页面上显示速度计 一个想法是我设置一个背景并旋转针 有人知道相关插件吗 这里有一些供您参考 http bernii github com gauge js http bernii github com gauge
  • 如何使用 JavaScript 中的值填充下拉列表?

    我在 Tridion CMS 扩展中的功能区工具栏按钮中添加了一个按钮 单击该按钮后 将显示一个弹出页面 其中包含两个下拉菜单 通过更改第一个下拉控件中的值 我应该填充第二个下拉控件的值 就我而言 我正在使用ASP drop down li
  • 在Javascript中按降序对字符串进行排序(最有效)?

    W3Schools 有这个例子 var fruits Banana Orange Apple Mango fruits sort fruits reverse 这是在 Javascript 中按降序对字符串进行排序的最有效方法吗 Updat
  • 在网页上的文本框中键入内容时删除所有空格

    我如何在用户打字时即时删除输入到文本框中的空格 function var txt myTextbox var func function txt val txt val replace s g txt keyup func blur fun
  • jQuery 选择 # id 以单词为前缀,计数器为后缀

    有没有办法用 jQuery 选择所有带有前缀 my 和后缀 0 9 的 id 像这样的 my 1 4 还是可以用循环来实现 div div div div div div div div div div 第一个想法 似乎效果很好 div i
  • jquery window.open 在 ajax 成功中被阻止

    尝试在我的 ajax 成功调用中打开一个新的浏览器窗口 但是 它被阻止为弹出窗口 我做了一些搜索 发现用户事件需要绑定到 window open 才能避免这种情况发生 我还找到了这个解决方案 您可以在 ajax 之前打开一个空白窗口 然后在
  • 如何使用 JavaScript 获取没有 HTML 元素的纯文本?

    我的 HTML 中有 1 按钮和一些文本 如下所示 function get content I don t know how to do in here
  • 在闪亮的数据表中为每个单元格显示工具提示或弹出窗口?

    有没有什么方法可以为 r闪亮数据表中的每个单元格获取工具提示 有很多方法可以获取悬停行或列 但我找不到一种方法来获取行和列索引并为每个单元格显示不同的悬停工具提示 任何人都可以修改以下代码吗 library shiny library DT
  • 如何在 Angular 中从父组件访问子组件?

    I have mat paginator在子组件a中 如下所示 子组件 html
  • Typeahead.js substringMatcher 函数说明

    我只是在做一些研究Typeahead js这是一个非常酷的图书馆 感谢文档 我已经成功地获得了一个基本的示例 该文档也非常好 但是我试图弄清楚以下代码块实际上在做什么 var substringMatcher function strs r
  • 如何获取 UIWebView 中元素的位置?

    我在 iPad 程序中加载了 html 的 UIWebView 通过使用 webkit column width 我将 html 分为几列 padding 0px height 1024px webkit column gap 0px we
  • 无法在前端使用 JavaScript Fetch API 将文件上传到 FastAPI 后端

    我正在尝试弄清楚如何将图像发送到我的 API 并验证生成的token那是在header的请求 到目前为止 这就是我所处的位置 app post endreProfilbilde async def endreProfilbilde requ
  • 如何在 javascript 正则表达式中匹配平衡分隔符?

    我原以为这个问题是不可能的 据我所知 Javascript 的正则表达式既没有递归插值 也没有漂亮的 NET 平衡组功能 但问题就在那里 如问题 12 所示正则表达式 alf nu http regex alf nu 匹配平衡对 lt an
  • 防止文本区域出现新行

    我正在开发聊天功能 使用 Vue 并使用文本区域作为输入 以便溢出换行 并且对于编写较长消息的用户来说更具可读性 不幸的是 当用户按下 Enter 键并提交时 光标会在提交之前移动到新行 从而使用户体验感觉不佳 关于如何使用普通 Javas
  • 在 Javascript 中减少/分组数组

    基于this https stackoverflow com a 40774906 3254598例如 我想以稍微不同的方式按对象进行分组 结果应该如下 key audi items make audi model r8 year 2012
  • 如何在打字稿文件中导入没有定义文件的js库

    随着我们的项目变得越来越大 我想从 JavaScript 切换到 TypeScript 以帮助进行代码管理 然而 我们使用许多库作为 amd 模块 我们不想将其转换为 TypeScript 我们仍然想将它们导入 TypeScript 文件
  • 单击列表时使用 bootstrap Dropdown 防止下拉菜单消失

    我正在使用使用引导下拉菜单 http twitter github com bootstrap javascript html dropdowns生成下拉菜单 我想防止点击菜单时菜单消失 我已经实现了以下代码 但它不起作用 知道如何修复它吗

随机推荐

  • 创建 COM 互操作类的实例

    我正在尝试使用 C 从我的程序中打开 CorelDRAW 到目前为止 我已经能够通过引用适当的 com 库并调用来做到这一点 CorelDRAW Application draw new CorelDRAW Application draw
  • Python - ElementTree - 不能在元素上使用绝对路径

    当我尝试运行以下代码时 我在 ElementTree 中收到此错误 SyntaxError cannot use absolute path on element 我的 XML 文档如下所示
  • JSON 迭代器的类型安全警告

    我的问题来自于从 JSONObject 获取迭代器 最简单形式的代码生成错误 String json client retrieveList JSONObject jsonList new JSONObject json Iterator
  • Java - 不可变数组线程安全

    我有一个关于 Java 内存模型的问题 这是一个呈现问题的简单类 public class ImmutableIntArray private final int array public ImmutableIntArray array n
  • 如何有效地从 std::set 中选择随机元素

    如何有效地从一个随机元素中选择一个std set A std set iterator is 不是随机访问迭代器 所以我不能像为一个随机选择的元素那样直接索引std deque or std vector I could获取从返回的迭代器s
  • 表达式 lambda 和语句 lambda 之间的区别

    表达式 lambda 和语句 lambda 之间有区别吗 如果是这样 有什么区别 在下面的链接中找到了这个问题 但无法理解答案 什么是 Lambda 表达式 C 面试题 http csharpinterviewfaq blogspot in
  • MFMailComposeViewController 未从视图中消失

    我有以下代码 当调用操作表上的按钮时会调用该代码 但是 当我按取消 然后删除草稿时 它只是收费并且不会关闭 我在应用程序的其他地方使用相同的代码 并从选择的表格视图单元格中调用它 并且它可以在那里找到 有什么想法为什么它在这里不起作用吗 当
  • 当变量超出范围时是否意味着它不存在?

    我不确定我是否理解作用域 超出作用域的变量 我正在使用 Ruby 是否存在于内存中的某处 或者它是否停止存在 我知道你无法访问它 说超出范围的变量不再存在是不准确的吗 也许这是一个哲学问题 如果您使用托管语言 那么您不会分配和取消分配内存
  • Google Oauth2 userinfo API 不返回用户名数据

    在过去的几个月里 我一直在使用 OAuth 登录后使用此 url 来检索用户的名称和信息 https www googleapis com oauth2 v1 userinfo alt json 这给了我以下格式的 JSON id 1234
  • openGL以伪3D视角绘制扭曲的精灵(图像)

    好吧 这将是一个很难解释的事情 我正在使用 AndEngine 我认为是 openGL 为 Android 制作一个非常基本的 伪 3d 赛车游戏 我不相信使用 AndEngine 真的与这个问题有任何关系 因为我直接访问 openGL 函
  • UILocalizedIndexedCollat​​ion 仅返回英文排序规则

    我正在尝试使用以下方法获取像联系人这样的本地化索引UILocalizedIndexedCollation 在 通讯录 中 当我更改语言时 索引会更改以匹配语言 然而sectionIndexTitles始终返回英文索引 我已经用我创建的演示应
  • ValueError:“10.0.0.0/24”似乎不是 IPv4 或 IPv6 网络

    我想在 Python 中使用 IP 子网 IP 地址 我使用以下命令创建了 Python 代码ipaddress模块 当我在 pycharm IDE 中运行代码时 它工作正常 但是当我在命令提示符下键入时运行python test py 它
  • 如何使用 BEM 正确设置元素的范围?

    给定以下 BEM 树结构 其中存在五个嵌套级别 collection main features top story byline author 根据 BEM 的命名约定 其中一个元素是块的一部分 并且在它所属的块之外没有任何意义 命名该元
  • 什么是“别名”流缓冲区?

    什么是 别名流缓冲区 我在评论中遇到了这个词answer https stackoverflow com questions 3318714 check if ostream object is cout or ofstream c 331
  • 在后台接收 UIPasteboard (generalPasteboard) 通知

    有办法做到这一点吗 我注册我的对象UIPasteboardChangedNotification在启动时 但是当将其发送到后台并打开 例如 Safari 并复制一些文本时 我的处理程序永远不会被调用 我现在只使用模拟器 我都用过 NSNot
  • 自定义开关按钮动画

    我用的是定制的开关按钮 in the 自定义开关按钮 https stackoverflow com questions 30593193 creating sliding on off switch button in javafx an
  • Flexbox 项目之间的间距

    这就是我要的 但这是我最接近的 body margin 0 padding 0 border 1px solid red flex display ms flexbox display webkit box display webkit f
  • 如何在 flink 独立安装上进行 kerberos 身份验证?

    我有一个独立的 Flink 安装 我想在其上运行一个将数据写入 HDFS 安装的流作业 HDFS 安装是 Cloudera 部署的一部分 需要 Kerberos 身份验证才能读取和写入 HDFS 由于我没有找到有关如何使 Flink 与受
  • GLES20Canvas.nDrawDisplayList 很慢

    我有一个正在尝试显示的自定义视图 但是我看到它上面有一堆抖动 一切都滚动缓慢 并且响应速度不及应有的水平 我使用了traceview并看到了 GLES20Canvas nDrawDisplayList 似乎要花很多时间来执行 有什么帮助吗
  • Javascript 中如何检测对象是否已被垃圾回收?

    我正在构建一个 JavaScript 游戏 它创建一个Level使用 var 的对象 function start var myGameLevel new Level 2 This Levelobject 有很多功能 主要是向 DOM 添加