是否有必要取消原始值以进行垃圾收集?

Hri*_*dov 6 javascript primitive garbage-collection

如果我有以下代码:

function MyClass() {
    this.data = {
        // lots of data
    };
}

var myClassInstace = new MyClass();

var myobj = {
    num:123,
    str:"hello",
    theClass:myClassInstance
};
Run Code Online (Sandbox Code Playgroud)

我知道这是绝对必要的:

myobj.theClass = null;
Run Code Online (Sandbox Code Playgroud)

为GC 释放myClassInstance它的data财产.然而,我应该怎么做myobj.num和myobj.str?我还必须给他们一个价值null吗?事实上,他们是原始的改变任何关于GC的事情吗?

Sco*_*cus 5

实现垃圾收集的JavaScript运行时将能够在代码无法再访问值时立即收集项目.这对于对象引用和原语都是如此.收集项目的确切时刻的详细信息因实现而异,但甚至不需要将对象引用设置为null(如您所述),除非您需要比当前函数的自然终止更早地清理对象.

这一切都与"范围"和范围链的基本概念联系在一起.当项目不再位于任何其他对象范围链中时,可以收集该项目.清楚地理解这一点将回答这个问题,也有助于理解闭包,这些闭包是物品在内存中停留的时间比您预期的要长.