【问题标题】:Will this javascript cause memory leak?这个javascript会导致内存泄漏吗?
【发布时间】:2011-10-02 14:45:15
【问题描述】:
function outer(){
  var a, b, c;

  function inner1(){
    ...
  }

  function inner2(){
    ...
  }

  inner1();
  inner2();
  ...
}

我想保持全局命名空间干净,所以我写了上面的代码。内部函数仅由外部内部的代码使用。但在那之后,我开始考虑这是否会导致任何内存问题。我不确定内部函数是预先创建的还是每次调用 external() 时创建的?它们会导致内存泄漏吗?

有人能帮忙解释一下调用 outer() 以及返回时会发生什么吗?如果有任何关于 javascript 内存管理的好书或文章,请参考我。我总是对这些问题感到困惑。谢谢。

【问题讨论】:

    标签: javascript memory-leaks


    【解决方案1】:

    不确定第一部分,但关于第二部分有一个类似的问题:

    Do you know what may cause memory leaks in JavaScript?

    How do I track and debug JavaScript memory leaks in Firefox?

    【讨论】:

      【解决方案2】:

      在使用 JavaScript 的浏览器中导致内存泄漏的主要问题是 DOM 和 JS 有两个独立的垃圾收集器。如果您开始在闭包函数中引用 DOM 元素,然后再次反向引用函数内部的某些内容,您将面临问题。你的结构没有泄漏,但你想做更多的事情,这可能会泄漏。

      【讨论】:

        【解决方案3】:

        回答您关于创建内部函数的问题:我相信每次运行 outer() 时都会创建/定义您的内部函数,并且大多数 JS 解释器应该在 outer() 运行之后对它们进行垃圾收集,以及函数范围内的所有其他变量 - 除非 outer() 将这些内部函数“导出”到其自身范围之外,例如将它们分配为事件处理程序或将它们包含在 return 语句中以供以后使用。

        【讨论】:

        • 好吧,如果它们被导出和使用,我不会称之为泄漏。
        • @davin - 不,我也没有。我并没有真正解决内存泄漏问题,只是每次调用 outer() 时是否创建内部函数的问题。
        【解决方案4】:

        除非你把一些 other 代码放在里面 - 你不应该担心这样简单的闭包中的泄漏。现代 javascript 引擎可以很好地处理这些问题。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多