function outer(){
var a, b, c;
function inner1(){
...
}
function inner2(){
...
}
inner1();
inner2();
...
}
我想保持全局命名空间干净,所以我写了上面的代码。内部函数仅由Outer内部的代码使用。但之后我开始考虑这是否会导致任何内存问题。我不确定是否事先创建了内部函数,或者每次调用outer()时是否创建了内部函数?它们会导致内存泄漏吗?
有人可以帮助解释调用outer()和返回时会发生什么吗?如果有关于javascript内存管理的好书或文章,请转介我。我总是对这些问题感到困惑。感谢。
答案 0 :(得分:2)
对第一部分不确定,但第二部分有类似的问题:
Do you know what may cause memory leaks in JavaScript?
How do I track and debug JavaScript memory leaks in Firefox?
答案 1 :(得分:1)
使用JavaScript导致内存泄漏的主要问题是DOM和JS有两个独立的垃圾收集器。如果您开始在闭包函数中引用DOM元素,然后再次反向引用函数内部的某些内容,您将面临问题。你的结构没有泄漏,但是你想要做更多的东西而且可能会泄漏。
答案 2 :(得分:0)
除非你把一些其他代码放在里面 - 你不应该担心这种简单的闭包中的泄漏。现代的JavaScript引擎处理得非常好。
答案 3 :(得分:0)
回答你关于内部函数创建的问题:我相信每次运行outer()
时都会创建/定义你的内部函数,并且大多数JS解释器应该在outer()
之后对它们进行垃圾收集。运行,以及函数范围中的所有其他变量 - 除非 outer()
“导出”这些内部函数超出其自己的范围,例如将它们指定为事件处理程序或将它们包含在return语句中以供以后使用。