我一直在浏览大量关于JavaScript严格模式的博客文章,文档等。替代品删除?
我注意到delete关键字有很多限制。我甚至不知道你是否可以称他们为限制。好像delete
只是不再起作用。
我很乐意使用严格模式。这是一个好主意。但我也认为删除是一个好主意。
有没有其他方法可以“删除”一个变量,或者我只是搞砸了?
我一直在浏览大量关于JavaScript严格模式的博客文章,文档等。替代品删除?
我注意到delete关键字有很多限制。我甚至不知道你是否可以称他们为限制。好像delete
只是不再起作用。
我很乐意使用严格模式。这是一个好主意。但我也认为删除是一个好主意。
有没有其他方法可以“删除”一个变量,或者我只是搞砸了?
如何将变量设置为null
?一旦将变量设置为null
,JavaScript垃圾收集器将在下次运行时删除所有未引用的变量。
HTH。
编辑:作为@chris Buckler在评论中提到,这不能在全局范围内完成,因为全局变量永远不会被垃圾收集。
这样做会将值赋值为null,但变量实际上不会被销毁。 – clamchoda 2011-04-14 19:31:12
@Chris - 将其设置为空将正常*(如果没有更多引用该变量)使其符合GC的条件。不幸的是,这并不适用于全局变量,根据http://stackoverflow.com/questions/864516/what-is-javascript-garbage-collection,但这个问题并没有启发我们,这是OP所指的事实一个全局变量。 – 2011-04-14 19:36:46
这就是为什么我没有标记你:) – clamchoda 2011-04-14 19:39:21
你没有delete
变量。
delete
用于从对象中移除属性。
delete foo.a
将从对象foo
中移除属性"a"
。
为什么你需要从范围中删除一个局部变量?你可以只设置变量为undefined
(function(undefined) {
// undefined is undefined.
})();
(function() {
var undefined; // undefined is undefined
})();
另一种方式来检查反对票不确定会做foo === void 0
因为void
是它运行后的表达式,并返回undefined
操作。这是一个聪明的伎俩。
正如其他人暗指的那样,您应该永远不需要delete
变量。这听起来更像是一个没有适当控制范围的问题。如果将变量保留在函数作用域中,那么一旦它们不再被引用,它们将从内存中释放。
您是否拥有除全局window
命名空间之外的其他全局命名空间?或许,这将有利于你有类似的东西出现这种情况:
(function(global) {
var Application = {};
Application.config = { /* config stuff */ };
global.Application = Application;
})(window);
// if you need to remove config, you can remove it from
// your object and not the window object:
delete Application.config;
删除和未定义的JS真正深入了解:
http://perfectionkills.com/understanding-delete/
http://scottdowne.wordpress.com/2010/11/28/javascript-typeof-undefined-vs-undefined/
介绍我们想要达到的目标?现在的问题看起来像是一个咆哮。 – Oded 2011-04-14 19:15:33
听起来像hes寻找delete关键字的替代方法以删除javascript中的变量... – clamchoda 2011-04-14 19:23:56