所以我建立與HTML5的新<Audio>
標籤的音頻播放器,但我的「M聲明,初始化和操縱<Audio>
序列的所有的JavaScript(See example here)。基本上<Audio>
標籤一次只允許播放一首歌曲並且易於操作,因此無論何時「下一個」,「上一個」,「隨機播放」,或者甚至只是選擇另一首歌曲,我都會將音頻標籤的src
替換爲新的。網址,包含新曲垃圾收集在Javascript中當全局變量參與
一旦負載,我聲明的變量song
像這樣:
var song= new Audio("url");
和所有其他下列選定的歌曲只是一個像這樣的song
覆蓋:
song= new Audio("new url");
的方法已經結束了工作,但每首歌例如,事件處理監控之類的range擦洗和其確定範圍長度的屬性max
以及確定索引落在該範圍上的位置的值與以前的每個song
實例相關聯。我不得不重新分配事件監聽器,並且每次和一定量的歌曲後重新分配這些屬性,性能開始受到影響。
我的問題是,即使javascript有一個垃圾收集器,目標內存不再使用,song
的實例都具有與它們相關的全局事件偵聽器,所以我不認爲它們會被自動刪除。一旦歌曲被覆蓋,是否有一些方法可以刪除它們?是否有完全不同但更好的方法來完成我想要的?
感謝您的任何幫助和建議!
當不再有對象**的任何引用**時,由全局變量引用的對象可用於垃圾回收。因此用一個對另一個對象的引用替換一個對象的引用使得第一個對垃圾回收可用(假設沒有其他引用)。 – RobG
是的,但全球變量總是會有一個參考,因爲他們真的是window.someVar – TGH
@RobG好吧,我明白了什麼意思。您正在討論切斷全局變量與全局變量之間的關係。 – TGH