javascript - 如何从 JavaScript 解释器中完全清除变量?

标签 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. 如果是,该怎么做?

最佳答案

Is it possible to completely wipe out variable from JavaScript interpreter?

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

If yes, how to do that?

这取决于变量的定义位置:

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 来做到这一点(这是我贫血的小博客上的一篇文章),只需分配给未声明的标识符即可:

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/

相关文章:

javascript - 嵌套字段上的 MongoDB 聚合 $size

javascript - React useEffect Hook 不会在带有 [] 依赖项的首次渲染时触发

javascript - 使用jquery发送表单,url中不带问号

javascript - 如何使用 javascript 查找 Outlook 的版本

javascript - Jquery Select2 插件不会应用于 JS 调用 Rails 应用程序后呈现的输入

prototypal-inheritance - 这个 Animal = function Animal 是做什么的?

javascript - 在已经有 onclick 事件的情况下使用 Fancybox jquery

javascript - mousemove 获取嵌套元素的 XY 偏移量

javascript - 将参数传递给 animate jquery 函数

javascript - 如何引用动态创建的变量