首页 > 解决方案 > 如果对象是通过引用复制的,为什么 JavaScript 垃圾回收会这样工作?

问题描述

例如,如果我们像这样复制一个对象并修改我们复制的对象中的一个属性:

let user = { name: 'John' };

let admin = user;

admin.name = 'Pete'; // changed by the "admin" reference

alert(user.name); // 'Pete', changes are seen from the "user" reference

为什么:

let user = { name: 'John' };
let admin = user;
user = null;
console.log(user); // will return null
console.log(admin);// will return {name: "John"}

标签: javascriptobjectgarbage-collectiongarbage

解决方案


通过调用user = null,您正在破坏现有 Object 对名为 的变量的引用,而user不是实际的 Object。

只要存在对它的一些引用,您就可以使用该对象。当没有更多引用时,最终将被垃圾收集。

你所做的可视化:

user --> { name: 'John' }

user --> { name: 'John' } <-- admin

user --> null
         { name: 'John' } <-- admin

推荐阅读