问:我想弄清楚为什么这段代码中有删除语句?
一旦语句执行完毕,我的假设是foo
将被取消引用,因此不需要明确地执行它。
(function () {
var foo = globalObject;
foo.bar = function () {
//code here
}
delete foo;
}());
这里发生了什么?
答案 0 :(得分:2)
有关何时使用delete
运算符,请参阅this article。
这似乎不适合使用。
无法删除局部变量,因为它们在内部标有DontDelete
属性。有时你可能想要清除一个局部变量(如果你想释放它使用的任何内存,并且范围可能在一个闭包中无限期地存在),但是你没有使用delete
运算符来达到这个目的 - 您只需将其设置为null
。
在不创建闭包的普通函数中,当函数完成时,任何局部变量都将被简单地进行垃圾收集,如果其他代码中没有对其数据的其他引用,那么垃圾收集器将释放该数据。 / p>
您需要担心清除对数据的引用的唯一时间是当您拥有一个长时间存在的范围(关闭或全局)并且您不再需要该数据并且释放其内存时非常有用的使用。
仅供参考,delete
运算符最常见的用法是从对象中删除属性,如下所示:
var foo = {x: 1, y: 2};
delete foo.x;