【问题标题】:Javascript delete statementJavascript 删除语句
【发布时间】:2015-08-29 18:50:48
【问题描述】:

问:我想弄清楚为什么这段代码中有删除语句?

我的假设是,一旦语句完成执行,foo 将被取消引用,因此无需显式执行此操作。

(function () {
    var foo = globalObject;

    foo.bar = function () {
        //code here
    }
    delete foo;
}());

这是怎么回事?

【问题讨论】:

  • 如我所见,没有处理关于 foo 变量的操作...也许这段代码是错误的?
  • 我的理解是创建了foo 变量,因此在语句执行期间不会引用全局对象。实际功能包含大约 1000 行代码 @monkeyinsight
  • 您的评论“我的假设是 foo 将在语句完成执行后被取消引用,因此无需显式执行此操作。”您的意思是在执行整个脚本后执行该变量?你需要删除 foo 来删除对 foo 的所有引用并使其未定义。

标签: javascript closures


【解决方案1】:

参见this article,了解何时使用delete 运算符。

这似乎不是一个正确的用途。

不能删除局部变量,因为它们在内部使用DontDelete 属性进行标记。有时您可能想清除局部变量(如果您想释放它使用的任何内存并且范围可能在闭包中无限期地存在),但您不要为此目的使用 delete 运算符 - 您可以将其设置为null

在不创建闭包的普通函数中,任何局部变量都将在函数完成时被垃圾回收,如果在其他代码中没有其他对其数据的引用,则该数据将被垃圾回收器释放。

您需要担心清除对数据的引用的唯一情况是,当您的作用域将长期存在(闭包或全局)并且您不再需要该数据并且释放其内存很有用时用法。

仅供参考,delete 运算符最常见的用途是从对象中删除属性,如下所示:

var foo = {x: 1, y: 2};
delete foo.x;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2019-02-20
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多