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" }
设置a
以null
:
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