背景
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
问题
答案 0 :(得分:1)
是否可以从JavaScript解释器中彻底清除变量?
是和否,它取决于变量及其创建方式。您无法删除全局var
或let
变量(或全局const
)。对于“是”的情况,请参见下文。
如果是,该怎么做?
取决于变量的定义位置:
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 (这是我贫血的小博客上的帖子)来做到这一点,只需分配一个未声明的标识符:< / p>
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)如果它在函数中,请确保函数返回而不创建任何闭包。然后完全删除所有局部变量。