我试图让我的javascript游戏尽可能轻松顺畅,这就是我的困境:更糟糕的是,垃圾太多或者全局变量太多了?
一方面,为了避免垃圾收集造成的微暂停,我应该避免在我的函数和for循环中使用临时变量,那些我用" var"并且在功能结束时死亡,因为它们变成了垃圾 但另一方面,如果我用尽可能多的持久性全局变量替换所有这些临时变量,那么它是否会让我的程序更重,以便为浏览器的javascript引擎运行? 更糟糕的是什么?
(仅考虑易于编写和避免错误,我永远不会删除临时变量。例如,如果函数A调用函数B并且两者都有for(i = ...)而不是for( var i = ...),函数B for循环会意外地搞乱函数A" i"因为它将是相同的全局变量而不是两个不同的临时变量对于每个函数,都会有bug。使用全局变量来避免这种情况的唯一方法是使用更长的更明确的名称,这在你必须编写很多内容时很烦人。但垃圾收集微暂停在游戏中很烦人所以我必须避免临时变量。这是一个多么困境。)
答案 0 :(得分:2)
Javascript具有自动垃圾收集功能。虽然您不希望被丢弃一次性变量,但使用函数来正确调整变量的范围并管理您的应用程序几乎在所有情况下都不会出现问题。
你应该在所有迭代循环中使用for(var i...)
,因为正如你所说,其他选项是1)愚蠢的长变量名或2)命名空间冲突。
通常,您应该使用函数来命名和模块化游戏/应用程序的组件。为了避免任何实名空间冲突,您可以将整个应用程序包装在函数中以创建私有名称空间,如:
(function(){
//code goes here
})();
我建议您阅读Memory Management和this StackOverflow question on global variables.
Writing Fast, Memory-Efficient JavaScript By Addy Osmani也是一篇关于Javascript垃圾收集的精彩文章。