JavaScript垃圾收集器处理全局变量吗?

自从我看到几条不同的评论后,我对此感到困惑。 我正在阅读一本JavaScript书籍,其中提到将全局变量设置为null是很好的做法(假设没有其他引用),并且GC在下一次扫描时为此变量回收内存。 我见过其他评论,说全局变量永远不会被GC处置。

当在OOP结构中编程JavaScript时,如果我有这样的事情(游戏在全局环境中)会发生什么:

var game = {};
game.level = 0;
game.hero = new hero();
//do stuff
game.hero = null;

因为英雄居住在存储在游戏中的对象中,该对象存在于全局上下文中,所以如果我将例如英雄设置为空,这是否由GC处置?


全局变量永远不会被GC处理,因为全局变量仍然存在。 但是,将其设置为null将允许收集它引用的内存。

例如

之前:

global -> {nothingness}

后:

global -> var a -> object { foo: "bar" }

设置anull

global -> var a -> null

在这里,对象使用的内存将有资格收集。 变量a仍然存在,它只是引用null

从不收集全局变量的说法有些误导。 可以更准确地说,任何可溯源到全局上下文的内存目前都不符合收集条件。

回答你的问题,是的 - 英雄对象将有资格收集,因为它与全局上下文的间接连接已被切断。

链接地址: http://www.djcxy.com/p/27185.html

上一篇: Does javascript Garbage Collector dispose global variables?

下一篇: JavaScript garbage collection when variable goes out of scope