在JavaScript中释放内存的正确方法

时间:2018-08-13 17:03:27

标签: javascript memory

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

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

假设我有以下html标记:

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

现在,我要删除<my-tab>

var element = document.getElementById ("myTab");
element.parentNode.removeChild (element);
element = null;

还是我必须取消引用子元素的每个对象并删除其事件侦听器?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

示例:

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

whatever();

输出:

"object"

要删除子节点,请参阅以下内容: Does removeChild really delete the element?

来源:

https://www.w3schools.com/js/js_datatypes.asp