如何从JavaScript解释器中彻底清除变量?

时间:2017-09-21 15:42:47

标签: javascript

背景

  • 我想彻底清除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
    

问题

  1. 是否可以从JavaScript解释器中彻底清除变量?
  2. 如果是,该怎么做?

1 个答案:

答案 0 :(得分:1)

  

是否可以从JavaScript解释器中彻底清除变量?

是和否,它取决于变量及其创建方式。您无法删除全局varlet变量(或全局const)。对于“是”的情况,请参见下文。

  

如果是,该怎么做?

取决于变量的定义位置:

1)如果它是全局变量,请不要将其声明为letvar;相反,分配给全局对象的属性(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)如果它在函数中,请确保函数返回而不创建任何闭包。然后完全删除所有局部变量。