不久前,埃里克·利珀特(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
完全不同.