javascript - 如果对象是通过引用复制的,为什么 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"}
解决方案
通过调用user = null
,您正在破坏现有 Object 对名为 的变量的引用,而user
不是实际的 Object。
只要存在对它的一些引用,您就可以使用该对象。当没有更多引用时,最终将被垃圾收集。
你所做的可视化:
user --> { name: 'John' }
user --> { name: 'John' } <-- admin
user --> null
{ name: 'John' } <-- admin
推荐阅读
- jmeter - 在 jmeter 负载测试期间/之后查看所有 http 请求错误
- reactjs - 加载组件出现在页面顶部
- typescript - 如何用 TypeScript 中的属性描述可调用的东西?以及如何调用以下函数?
- complexity-theory - T(n) 的重复 = T(n - sqrt(n)) + 1
- python - 按开始/结束时间戳对数据帧行进行分组
- typescript - 来自函数的数据类型未知 - 函数 v9
- angular - 我的示例 Angular 应用程序引发了一个错误,提示“类型 'Employee[]' 上不存在属性 'name'”。
- selenium - 如何在验证元素存在时重新开始测试
- c# - SignalR 在本地工作,但在部署后不起作用
- javascript - 在文本字段中搜索值,而不是预期 - Reactjs,express,MongoDB