我一直在浏览很多关于JavaScript严格模式的博客文章,文档等。
我注意到delete关键字有很多限制。我甚至不知道你是否可以称他们为限制。好像delete
似乎不再适用。
我很想使用严格的模式。这是一个好主意。但我也认为删除是一个好主意。
有没有其他方法可以“删除”变量,或者我只是搞砸了?
答案 0 :(得分:4)
您没有delete
个变数。
delete
用于从对象中删除属性。
delete foo.a
会从对象"a"
移除属性foo
。
为什么需要从范围中删除局部变量?您只需将变量设置为undefined
(function(undefined) {
// undefined is undefined.
})();
(function() {
var undefined; // undefined is undefined
})();
检查未定义的againts的另一种方法是执行foo === void 0
,因为void
是一个运算符,它在其后面运行表达式并返回undefined
。这是一个聪明的伎俩。
答案 1 :(得分:1)
如何将变量设置为null
?将变量设置为null
后,JavaScript垃圾收集器将在下次运行时删除所有未引用的变量。
HTH。
编辑:正如@chris Buckler在评论中提到的那样,这不可能在全球范围内完成,因为全局变量永远不会被垃圾收集。
答案 2 :(得分:1)
正如其他人所暗示的那样,你永远不应该真正需要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/