将Audio对象设置为undefined会导致内存泄漏吗?

Does setting an Audio object to undefined cause memory leaks?

本文关键字:内存 泄漏 对象 Audio 设置 undefined      更新时间:2023-09-26

我目前正在编写一个使用HTML5 Audio API的应用程序。在Chrome, IE和Firefox中,我注意到我可以创建一个Javascript音频对象,将其设置为播放声音文件,然后使其未定义,声音仍然会播放,如以下示例所示:

var a = new Audio;
a.src = 'longAudioFile.mp3';
a.play();
a = undefined;

当我以类似的方式使用许多音频对象时,如果我将一个设置为未定义,这会导致内存泄漏吗?或者当它完成播放/设置为暂停时,浏览器会清理它吗?

根据规格:

媒体元素不能因为所有对它们的引用都被删除而停止播放;只有当一个媒体元素处于不能再播放音频的状态时,该元素才会被垃圾收集。

对于一个没有显式引用存在的元素来说,播放音频是可能的,即使这样的元素不是仍然在积极播放:例如,它可以有一个当前的媒体控制器,仍然有引用,仍然可以被取消暂停,或者它可以被取消暂停,但等待内容缓冲。

播放媒体资源

也有清理指令:

& lt;…>释放媒体元素所持有的资源,或者通过非常小心地删除对元素的所有引用并允许它被垃圾收集,或者,更好的是,通过删除元素的src属性和任何source元素的后代,并调用元素的load()方法。

作者使用媒体元素的最佳实践

据我所知,浏览器会在播放结束后清理它。