javascript - 参数是否会使 JavaScript GC 无法收集对象?

标签 javascript garbage-collection

var person = {
    name: 'John'
};

function Pet1(person) {
    var owner = person.name;
    this.showOwner = function() {
        alert(owner);
    }
}

function Pet2(person) {
    this.showOwner = function() {
        alert(person.name);
    }
}

var pets = [new Pet1(person), new Pet2(person)];

...

pets.splice(0, 1);
pets.splice(0, 1);

当 Pet1 和 Pet2 超出范围或没有更多引用时,上面的代码阻止 JS GC 不收集 Pet1 和 Pet2 的实例。我知道的是 Pet2 但你不认为 Pet1 也可以防止 JS GC 吗?

最佳答案

关于您评论中的问题:

will the person (it's global in this case) variable prevent instances of Pet1 and Pet2 to be garbage collected (if out of scope and no more references)

不,为什么要这样? person 不引用 Pet 实例,相反。一旦您从 pets 数组中删除了对 Pet 实例的引用,就没有什么可以阻止 GC 收集它们(假设您的“...”代码没有创建对 pets[0]pets[1] 的其他引用)。

关于javascript - 参数是否会使 JavaScript GC 无法收集对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15446841/

相关文章:

Javascript 变量未定义,在外部 js 文件中使用事件监听器

Javascript 重新评估空变量值的有效方法

javascript - 我如何以及为什么要编写一个扩展 null 的类?

java.lang.OutOfMemoryError : Compressed class space 错误

Java 字符串内存泄漏

javascript - 在 HTML 中使用计时器平滑滚动

javascript - 在 Modern React 中沿组件层次结构传递数据

multithreading - 当 Async 值被垃圾收集时会发生什么?

WPF不释放内存

java - 为什么 G1 提供更好的暂停时间但吞吐量较低?