【问题标题】:Javascript closures cause memory leak?Javascript闭包导致内存泄漏?
【发布时间】:2021-08-02 14:13:12
【问题描述】:

我读过这本书“面向 Web 开发人员的专业 Javascript” 但我无法理解书中提供的解释。

let outer = function() {
    let name = 'Jake';
    return function() {
     return name;
    };
   };

这会泄漏为 name 分配的内存。此代码创建一个 内部闭包,所以只要外部函数存在,名称 变量不能被清理,因为会有一个持久化的 通过该闭包引用它。如果名称的内容 变量非常大,而不仅仅是一个短字符串,major 可能会导致问题。

我不知道这个变量是否会通过副本或引用传递,但据我了解:

  • 如果 name 变量将副本传递给 return headless 函数,为什么它不会被释放?
  • 如果它传递一个引用并且正在被使用,为什么会是内存泄漏?


(我是 JS 新手,我的问题可能看起来很愚蠢,但确实让我感到困惑,请帮忙)

【问题讨论】:

    标签: javascript memory-leaks


    【解决方案1】:

    函数内声明的任何变量都将在函数返回时被释放,期望那些在闭包内使用的变量。在您的示例中,变量name 必须在内存中,直到调用返回的函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-02
      • 1970-01-01
      • 2012-02-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多