这个javascript会导致内存泄漏吗?

时间:2011-10-02 14:45:16

标签: javascript memory-leaks

function outer(){
  var a, b, c;

  function inner1(){
    ...
  }

  function inner2(){
    ...
  }

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

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

有人可以帮助解释调用outer()和返回时会发生什么吗?如果有关于javascript内存管理的好书或文章,请转介我。我总是对这些问题感到困惑。感谢。

4 个答案:

答案 0 :(得分:2)

答案 1 :(得分:1)

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

答案 2 :(得分:0)

除非你把一些其他代码放在里面 - 你不应该担心这种简单的闭包中的泄漏。现代的JavaScript引擎处理得非常好。

答案 3 :(得分:0)

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