背景
- 我想从 JavaScript 解释器中完全清除该变量。
delete
关键字不起作用。> let foo = { }; undefined > delete foo true > foo {}
将变量设置为
undefined
不起作用。> let foo = { }; undefined > foo = undefined undefined > foo undefined > let foo = { }; SyntaxError: Identifier 'foo' has already been declared
问题
- 是否可以从 JavaScript 解释器中完全清除变量?
- 如果是,该怎么做?
最佳答案
Is it possible to completely wipe out variable from JavaScript interpreter?
是或否,这取决于变量及其创建方式。您无法删除全局 var
或 let
变量(或全局 const
)。对于"is"的情况,请参见下文。
If yes, how to do that?
这取决于变量的定义位置:
1) 如果是全局变量,不要用let
或var
声明;相反,分配给全局对象的属性(全局范围内的 this
;也可以通过浏览器上的全局 window
或 NodeJS 上的 global
访问) 。当您想要删除它时,请使用delete
。
window.foo = "bar";
console.log("foo" in window); // true
console.log(foo); // "bar"
delete window.foo;
console.log("foo" in window); // false
console.log(foo); // ReferenceError: foo is not defined
我应该注意到,在松散模式下,您也可以通过依赖 The Horror of Implicit Globals 来做到这一点(这是我贫血的小博客上的一篇文章),只需分配给未声明的标识符即可:
foo = "bar";
console.log("foo" in window); // true
console.log(foo); // "bar"
delete foo;
console.log("foo" in window); // false
console.log(foo); // ReferenceError: foo is not defined
但是...使用严格模式,正是出于这个原因,所以拼写错误不会造成太大影响。 :-)
2) 如果它在函数中,请确保函数返回时不会创建任何闭包。然后它的所有局部变量都被完全删除。
关于javascript - 如何从 JavaScript 解释器中完全清除变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46348108/