javascript – Typescript接口实例(对象)的可变性

我发现接口非常有用,但由于内存问题我需要开始优化我的应用程序,我意识到我并不真正了解它们在内部如何工作.

说我有

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超出范围而不是由闭包引用).

相关文章

我最大的一个关于TypeScript的问题是,它将原型的所有方法(无...
我对React很新,我正在尝试理解子组件之间相互通信的简洁方法...
我有一个非常简单的表单,我将用户电子邮件存储在组件的状态,...
我发现接口非常有用,但由于内存问题我需要开始优化我的应用程...
我得到了一个json响应并将其存储在mongodb中,但是我不需要的...
我试图使用loadsh从以下数组中获取唯一类别,[{"listing...