什么是JavaScript垃圾收集?对于web程序员来说,了解JavaScript垃圾收集对于编写更好的代码有什么重要意义?

推荐答案

不久前,埃里克·利珀特(Eric Lippert)就这个问题写了一篇detailed blog post分的文章(另外还将其与VBScript分进行了比较).更准确地说,他写了JScript,这是微软自己的ECMAScript实现,尽管与JavaScript非常相似.我可以想象,你可以假设Internet Explorer的JavaScript引擎的绝大多数行为都是相同的.当然,不同浏览器的实现会有所不同,不过我怀疑您可以采用一些通用原则,并将它们应用于其他浏览器.

引自该页:

JScript使用非世代的

  • "范围内"的每个变量

  • 每隔一段时间,垃圾就会 收集器运行.首先,它将一个 "标记"在每个对象上,变量, 字符串等-跟踪的所有内存 由GC负责.(JScript使用变体 内部和那里的数据 struct 中有大量额外未使用的位. 那个 struct ,所以我们只设置了一个 他们.)

  • 其次,它清除了屏幕上的标记

  • 在这一点上我们知道所有的 仍标记的内存已分配 任何人都达不到的记忆 任何作用域内变量的路径.全 这些对象中的任何一个都被指示 把他们自己撕碎,这会毁了他们 任何循环引用.

垃圾收集的主要目的是让程序员not担心他们创建和使用的对象的内存管理,当然有时也不可避免——至少大致了解垃圾收集的工作原理总是有益的.

Historical note:较早的答案修订版对delete操作员的引用不正确.在JavaScript the delete operator removes a property from an object中,它与C/C++中的delete完全不同.

Javascript相关问答推荐

如何循环访问对象数组并以关键值形式获得结果?

如何在不分配整个数组的情况下修改包含数组的行为主体?

D3多线图显示1线而不是3线

. NET中Unix时间转换为日期时间的奇怪行为

JQuery. show()工作,但. hide()不工作

InDesign—创建一个独立的窗口,在文档中进行更正时保持打开状态

从WooCommerce Checkout Country字段重新排序国家,保持国家同步

Spring boot JSON解析错误:意外字符错误

在nextjs服务器端api调用中传递认证凭证

将内容大小设置为剩余可用空间,但如果需要,可在div上显示滚动条

让chart.js饼图中的一个切片变厚?

将数组扩展到对象中

邮箱密码重置链接不适用于已部署的React应用程序

在VS代码上一次设置多个变量格式

无法读取未定义的属性(正在读取合并)-react RTK

如何为仅有数据可用的点显示X轴标签?

如何正确地在ComponentWillUnmount中卸载状态以避免内存泄漏?

为什么当雪碧的S在另一个函数中时,Phaser不能加载它?

$GTE的mongoose 问题

使用Java脚本在div中创建新的span标记