【问题标题】:Right way to free memory in JavaScript在 JavaScript 中释放内存的正确方法
【发布时间】:2018-08-13 17:03:26
【问题描述】:

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

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

假设我有以下 html 标记:

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

现在我想删除&lt;my-tab&gt;。做就够了吗

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

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

【问题讨论】:

  • 我可能错了,但我怀疑内存管理是由实现决定的,而不是 ECMAscript 规范中明确规定的。感谢上帝,您不必为 Internet Explorer 6 编写 JavaScript。

标签: javascript memory


【解决方案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

【讨论】:

  • 这很有趣。我不知道 null 在 JavaScript 中是一个空对象。因此,如果在任何情况下我必须手动取消引用引用我已删除的元素的变量(例如全局变量),我会将变量设置为未定义。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2012-01-22
    • 1970-01-01
    • 2023-03-11
    • 2011-08-29
    • 2015-06-21
    • 1970-01-01
    • 2012-02-28
    • 2015-05-04
    • 1970-01-01
    相关资源
    最近更新 更多