gpt4 book ai didi

JavaScript - 本地类变量会被垃圾收集吗?

转载 作者:行者123 更新时间:2023-12-04 09:15:07 25 4
gpt4 key购买 nike

我的问题类似于 Do local variables inside of a loop get garbage collected?
我有一个类使用递归在打字机风格的字符对话屏幕中播放 blip 声音效果:

class DialogueBox extends Component{

constructor(props){
super(props)
this.state = {...
}
...
}


typeWriter(txt,i,speed=50) {
if(i==txt.length){
...
return
}
else{
// a blip sound effect plays on every new character typed
let sfx = new Audio(speechBlip);
sfx.play();
...
setTimeout(()=>this.typeWriter(txt,i+1,speed),speed);

}

}
注意局部变量 let sfx = new Audio(speechBlip)被实例化多次。这会导致内存中存储的大量音频对象永远不会被清理吗?
我正在使用这种方法,因为我喜欢它听起来比在构造函数中创建一个 Audio() 并将其重新设置为 0 次或仅在文件播放完毕时重播。
这种方法是否会严重拖累内存?我尝试使用开发工具的内存面板,但我不确定我是否正确解释了它并且不确定它将如何扩展......

最佳答案

TL; 博士;是的,它将被清除
回答:
有可能无法清除。如果您曾经存储该 sfx 变量以供以后使用(假设您添加到某种形式的事件、超时等...),那么在执行该监听器后它将被清除。
这是一个非常非常情况的问题,请记住这一点!例如,如果您有一个事件发射器,并且您将一个函数附加到 on事件,则该函数不会从内存中清除(例如)。
反正。如果该变量用于执行 sfx.play() ,那么它将从内存中清除。
一个小建议。你为什么不创建一个类变量让我们说:this.blipSound = new Audio() ,并使用 this.blipSound.play()在您需要它的地方,您不必每次都按照您的建议将其设置为 null 或 0,只需保留它?这样你就不必担心内存泄漏,因为会有一个类的实例?

关于JavaScript - 本地类变量会被垃圾收集吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63260008/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com