我在游戏引擎中使用闭包来获取对象。说出类似的话:
var newSprite = function() {
var x = 0;
var y = 0;
var returnobj = {
getPos:function(){
return [x,y];
}
}
return returnobj;
}
这不是实际的代码,但它很好地说明了。我有一个场景图中的对象,如果我将场景图中的对象设置为null,垃圾收集会收集所有这些吗?我是否必须将每个变量设置为null?
答案 0 :(得分:5)
除非:
someSprite.getPos
方法。示例:
var sceneGraph = [newSprite(), newSprite(), newSprite()];
var gotYourSprite = sceneGraph[0];
var gotYourMethod = gotYourSprite.getPos;
sceneGraph = null;
// gotYourSprite is still available and is not GC'ed, but the other two are gone.
gotYourSprite = null;
// gotYourSprite is gone, but neither the method nor the private variables can be
// GC'ed because you still have gotYourMethod, which captured x and y.
gotYourMethod = null;
// Now everything will be GC'ed.
答案 1 :(得分:0)
是 - 一旦您的对象为null,闭包中的引用将不再可访问,并将被垃圾回收。如果没有其他内容可以引用该对象内部的内容。