我正在构建一个 JavaScript 游戏,它创建一个Level
使用 var 的对象:
function start() {
var myGameLevel = new Level(2);
}
This Level
object 有很多功能,主要是向 DOM 添加元素并使它们具有交互性。一个简化:
function Level(i) {
var _difficulty = i;
this.init = function(){
jQuery("#container").append(...game elements here...);
jQuery("#button").on('click', function() {...});
}
}
我的问题:我怎样才能知道Level
中创建的对象start
函数是否已被垃圾回收?我的目标是只使用var
变量,以便没有外部引用。当 DOM 中的所有游戏元素被清除时,我希望Level
对象将从内存中释放,但我如何确定?
通常,JavaScript 中的垃圾收集是不确定的。您无法知道对象是否或何时被垃圾收集。这适用于强引用的对象。
在 ES12 及之后的版本中,您可以使用FinalizationRegistry https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/FinalizationRegistry.
终结器允许您使用 JavaScript 回调来处理对象何时被垃圾回收。但限制在于,回调何时执行是不确定的。可能需要一分钟或一个小时。
// object creation
let abc = new Array(200).fill(true);
const cleanup = new FinalizationRegistry(key => {
// your code here
});
// tagging variable abc to finalizer
cleanup.register(abc, 'werwer');
// abc = null;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)