JavaScript中释放内存的正确方法

JavaScript中释放内存的正确方法,javascript,memory,Javascript,Memory,作为一名C开发人员,我感到迫切需要尽可能准确地释放内存。但是在阅读了一些关于JavaScript内存管理的帖子之后,我仍然对这个话题有一些疑问。据我所知,有一个垃圾收集器,当一个对象不再被引用时,它会自动释放内存,GC可以找到时间。因此,当变量超出范围时,保存在局部变量中的对象很可能被释放 假设我有一些自定义元素(选项卡控件、数据表、输入等)。这些自定义元素的类具有成员变量,其中存储了特定元素的多个数据。还可以将事件侦听器附加到自定义元素所包含的元素 假设我有以下html标记: <my-t

作为一名C开发人员,我感到迫切需要尽可能准确地释放内存。但是在阅读了一些关于JavaScript内存管理的帖子之后,我仍然对这个话题有一些疑问。据我所知,有一个垃圾收集器,当一个对象不再被引用时,它会自动释放内存,GC可以找到时间。因此,当变量超出范围时,保存在局部变量中的对象很可能被释放

假设我有一些自定义元素(选项卡控件、数据表、输入等)。这些自定义元素的类具有成员变量,其中存储了特定元素的多个数据。还可以将事件侦听器附加到自定义元素所包含的元素

假设我有以下html标记:

<my-tabbar>
    <my-tab id="myTab">
        <my-input></input>
        <my-dataTable></my-dataTable>
    </my-tab>
</my-tabbar>

或者我必须取消对子元素的每个对象的引用并删除它们的事件侦听器吗?

删除该元素就足够了。您甚至不必在事后将变量设置为
null
,您可以信任JS引擎在其超出范围时释放内存。

将对象设置为null将使其成为空对象。一旦对象超出范围,GC(当它运行时)将清除它。将本地对象设置为null对您没有任何好处

例如:

function whatever()
{
    var something = null;
    console.log( typeof( something ) );
}

whatever();
输出:

"object"
要删除子节点,请参见以下内容:

资料来源:


我可能错了,但我怀疑内存管理是由实现决定的,而不是ECMAscript规范中特别规定的。谢天谢地,您从未为InternetExplorer6编写过JavaScript。这很有趣。我不知道null在JavaScript中是一个空对象。因此,如果在任何情况下,我必须手动取消引用引用已移除元素的变量(例如,全局变量),我会将该变量设置为未定义。
"object"