循环内的局部变量是否被垃圾收集?

时间:2011-10-11 02:16:52

标签: javascript performance garbage-collection

我想知道在循环之外放置在循环中引用的任何变量是否更有效 - 或者它们是否可以像函数内部的变量一样收集垃圾?

var obj = {key:'val'};
for(var i=0; i<10; i++){
    console.log(obj);
}

for(var i=0; i<10; i++){
    var obj = {key:'val'};
    console.log(obj);
}

我试图在我的浏览器的分析器中运行一些内存测试,但仍无法判断哪种方法更好。

3 个答案:

答案 0 :(得分:6)

var是函数作用域,没有作用域限制,因此它们是否出现在循环内并不重要。 What is the scope of variables in JavaScript?解释了这种区别。

下一版本的JavaScript将有let-scoped个变量,如果在循环内部声明,那么存储在这些变量中的值将在循环体运行结束时变得可收集。

答案 1 :(得分:1)

在变量退出范围之前,两者都不会收集垃圾。 Javascript中的范围由函数引入。循环结构对范围没有任何影响。

答案 2 :(得分:0)

就垃圾收集而言,其他答案所说的应该是真的,浏览器处理垃圾收集,如果变量在内部或外部声明为循环,则无关紧要。

至于效率,你的代码在循环之前声明变量会更加优化。