Javascript 类get方法的返回值是否被垃圾收集?

Javascript 类get方法的返回值是否被垃圾收集?,javascript,performance,memory-management,garbage-collection,Javascript,Performance,Memory Management,Garbage Collection,假设我有一个类,它有一个返回值的方法calculatePrice。它还有另一种使用calculatePrice的方法: class SodaCan{ 构造函数(id,其他参数){ this.id=id //更多构造函数逻辑 } 计算价格{ //做一些税收、回收利用等方面的计算 退货价格; } savePriceToDb(){ const price=this.calculatePrice(); save(this.id,{price}); } } //在全球范围内: const coke=win

假设我有一个类,它有一个返回值的方法
calculatePrice
。它还有另一种使用
calculatePrice
的方法:

class SodaCan{
构造函数(id,其他参数){
this.id=id
//更多构造函数逻辑
}
计算价格{
//做一些税收、回收利用等方面的计算
退货价格;
}
savePriceToDb(){
const price=this.calculatePrice();
save(this.id,{price});
}
}
//在全球范围内:
const coke=window.coke=new SodaCan('someId',1.19)
coke.savePriceToDb();
一旦
savePriceToDb
完成执行,就不再有对
price
的引用,因此我的假设是
price
会被垃圾回收。但是,
coke.id
不会被垃圾收集,因为它是
coke
的一个属性,在全局范围内可用。如果这是不正确的,请让我知道

现在让我们将
calculatePrice
更改为get方法,比如
get price

class SodaCan{
构造函数(id,其他参数){
this.id=id
//更多构造函数逻辑
}
获取价格(){
//做一些税收、回收利用等方面的计算
退货价格;
}
savePriceToDb(){
const price=this.price;
save(this.id,{price});
}
}
//在全球范围内:
const coke=window.coke=new SodaCan('someId',1.19)
coke.savePriceToDb();
(假定
savePriceToDb
函数实际上不需要说
constprice=this.price
,因为它可以调用
database.save(this.id,{price:this.price})

使用
get
语法,将
this.price
的结果附加到实例。由于
coke
在全局范围内可用,
coke.price
仍会引用它,并且不会被垃圾收集。对吗

如果我的假设是正确的,那么在内存管理方面,对类使用
get
方法是否有缺点?如果我不理解这里的内容,或者我的假设不正确,请告诉我

使用get语法,this.price的结果将附加到实例

不,不是。getter只是让它看起来像是一个属性,但实际上不是。每次阅读
this.price
时,它都会调用getter函数并返回值,就像
calculatePrice()
方法一样。该值未附加到任何位置


因此,如果调用者不在任何地方节约价格,它就会变成垃圾。

垃圾收集可以使用get,也可以不使用get,这没有什么不同。您唯一真正的GC问题是首先粘贴对窗口的引用。我的意思是,在我的实际代码中,我没有将其附加到
窗口
全局
,它更多地是一个示例来说明这个问题。在实际的代码中,在给定的时刻,我的内存中可能有数百或数千个
SodaCan
s,我正在尝试在给定的
SodaCan
中实施良好的内存管理,以优化许多并发实例。你能详细说明一下“这没什么不同”吗?你创造了大量的
SodCan
s,一切都将是GC,这里没有你需要的特殊内存管理。get和calculatePrice都返回一个数字类型,这里没有什么不同。我不知道该如何详细说明。这取决于注释所包含内容的性质。
//对税收、回收等进行一些计算。
。如果将信息存储在对象实例中,可能会增加内存使用量,但是调用方通过使用属性而不是方法调用,并没有具体地增加或减少内存开销。但是,请注意,作为一名开发人员,如果我要获取属性的值,我希望它只需要很少的时间,并且不会产生任何副作用(其他属性值更改等),而当我调用一个方法时,我确实希望它可能需要更多的时间。直截了当地说。谢谢你澄清了我的误解,并在此过程中回答了我的问题。