在Javascript中,我应该在加载新的实例后删除以前级别的实例吗?

cor*_*zza 6 javascript memory oop memory-leaks memory-management

我制作了一个由许多小关卡组成的HTML5游戏.当玩家到达门时,会加载另一个级别.当一个级别加载时,它基本上只是将所有实例数组设置为[]然后通过创建新的事物实例将内容推送到它们中,例如:

enemies = [] //this has previously been full of pointers from the old level
for (i = 0; i < n_enemies; i ++)
    enemies.push(new Enemy());
Run Code Online (Sandbox Code Playgroud)

但是,我注意到只是设置一个充满指针的数组[],实际上并没有删除实例!那么,javascript会自动执行此操作吗?或者我delete自己有每个实例?

Jiv*_*ngs 3

如果数组中的对象不再从任何地方引用,那么它们将被垃圾收集。没有规范说明何时发生这种情况,但应该在将它们从数组中删除后不久发生。

这不应该出现内存泄漏。

  • 另外,“delete”仅针对对象的属性定义,因此 javascript 甚至不包含删除数组变量的方法 - 您必须假设 js 引擎将在删除所有引用后负责垃圾收集。 (2认同)