我发现接口非常有用,但由于内存问题我需要开始优化我的应用程序,我意识到我并不真正了解它们在内部如何工作.
说我有
interface Foo {
bar: number
}
我用这种类型实例化一些变量:
let x : Foo = { bar: 2 }
Q1:这会创建一个新对象吗?
现在,假设我想改变bar的值.我这样做有两种方式.第一种方式:
x = { bar: 5 }
Q2:第一种方法是创建一个新对象并替换x引用的旧对象,导致旧对象(bar = 2)最终被垃圾收集?
第二种方式:
x.bar = 5
问题3:这不是创建一个新对象,而只是更新第一个对象(bar = 2)中bar的值并避免垃圾收集,因为仍然只有一个对象并且它正在使用中?
我相信我的问题的答案是肯定的,是的,是的.但我想确定,因为我真的很头疼处理过于频繁的垃圾收集,我认为我的代码的许多部分使用“第一路”而不是第二路可能是一个很大的因素.
解决方法:
您的答案(是,是和是)是正确的.如果你要用新的对象替换对象(x = {bar:5}),那么是的,这意味着与执行x.bar = 5相比,垃圾收集器还有更多工作要做.
Re Q2:x = {bar:5}创建一个新对象,意味着x引用的旧对象可用于垃圾收集,如果没有其他内容仍然引用x引用的旧对象.否则,如果某些内容仍然引用x引用的内容,例如:
let y = x;
x = {bar: 5};
…然后用于引用的对象x将会一直存在(因为y指的是它)直到/除非y不再引用它(因为你为y指定了不同的值,或者因为y超出范围而不是由闭包引用).
原文地址:https://codeday.me/bug/20190727/1549450.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。