【发布时间】:2011-08-11 18:39:49
【问题描述】:
我有一个案例,我的 JavaScript 中有一个变量,用于存储对一个类的多个实例的引用。该类创建了一个基于 div 的窗口,有点像灯箱,然后当我调用该类的 removeWindow 方法时,div 窗口元素从 DOM 中删除。所以一个序列可能是这样的:
var divWindow = null;
divWindow = new DivWindowClass(...);
/* do some stuff with the window */
divWindow.removeWindow();
稍后在代码中我再次创建了一个包含不同内容的窗口,但我还希望能够检查 divWindow 变量是否引用了任何内容。
这样做是否正确:
divWindow.removeWindow();
divWindow = null;
if (divWindow == null) { /* etc. */ }
/* later in the code */
divWindow = new DivWindowClass(...); /* with different content than first one */
或者这是否会导致 JavaScript 垃圾收集出现内存问题?如果我将 divWindow 设置为 null,这是否会向垃圾收集发出信号以收集我的对象并摆脱它,或者我还需要做些什么来保持整洁?
一如既往,提前致谢!
【问题讨论】:
-
如果你愿意,也可以
delete它。 -
@pimvdb,在使用
var语句声明的标识符(还有function声明、函数参数名称等)上使用delete将无效(它们被绑定为不可配置的属性其环境记录),而且这在严格模式下是不允许的,delete identifier;被视为SyntaxError。另见:understanding delete -
我确实研究过 delete,但我认为 delete 不能用于用 var 声明的变量?所以我不认为这是要走的路。如果我用它,会不会是删除 divWindow;这会将 divWindow 设置为 null,还是我仍然必须这样做以便我以后的条件工作?
-
@CMS 打败我。这是我读到的。
-
@CMS:谢谢。但是,如果我这样做
var a = 3; delete a,则无法再访问a。
标签: javascript class object memory-leaks garbage-collection