【发布时间】:2015-12-22 13:06:39
【问题描述】:
我有这段代码在窗口 onload 事件触发后创建一个匿名游戏实例。
由于整个函数是匿名的,并且对游戏对象的引用没有保存在任何地方,我真的很惊讶这个游戏居然能运行!
为什么 myGame 在 window.onload 之后没有被释放? 我知道垃圾收集不会立即发生,但我也从未见过 myGame 实例在随机时刻突然消失。 Game 类中的哪种代码能够防止实例被垃圾收集?是对 DOM 的引用吗?
Game.js
(function(window){
window.onload = function() {
// create a game instance but don't save the reference anywhere
var myGame = new Game();
};
function Game() {
var myCar;
this.name = "Main App";
this.init = function(){
this.logMessage("creating a game instance");
}
this.logMessage = function(msg) {
document.getElementById("message").innerHTML += msg + "</br>";
}
this.init();
}
})(window);
【问题讨论】:
-
“我也从未见过 myGame 实例在某个随机时刻突然消失” 你有什么证据表明它一直存在?出示证据,以便我们帮助您解释您所看到的。
标签: javascript garbage-collection