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

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

  function inner1(){
    ...
  }

  function inner2(){
    ...
  }

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

我希望保持全局命名空间的整洁,所以我编写了以上代码。内部函数仅由Outer内部的代码使用。但是在那之后,我开始考虑这是否会引起任何内存问题。我不确定内部函数是预先创建还是每次调用outer()时创建?它们是否会导致内存泄漏?
有人能帮忙解释一下当调用outer()时会发生什么以及返回时会发生什么吗?如果有关于JavaScript内存管理的好书或文章,请推荐一下。我总是被这些问题搞糊涂。谢谢。
4个回答

2

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

0

除非你在里面放了一些其他代码,否则你不必担心这样简单的闭包会泄漏。现代JavaScript引擎可以很好地处理这些问题。


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

如果它们被导出并使用,我不会称之为泄漏。 - davin
@davin - 不,我也没有。我并不是在回答内存泄漏的问题,而是在解决每次调用 outer() 时是否创建内部函数的问题。 - nrabinowitz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接