我想知道在循环之外放置在循环中引用的任何变量是否更有效 - 或者它们是否可以像函数内部的变量一样收集垃圾?
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);
}
我试图在我的浏览器的分析器中运行一些内存测试,但仍无法判断哪种方法更好。
答案 0 :(得分:6)
var
是函数作用域,没有作用域限制,因此它们是否出现在循环内并不重要。 What is the scope of variables in JavaScript?解释了这种区别。
下一版本的JavaScript将有let
-scoped个变量,如果在循环内部声明,那么存储在这些变量中的值将在循环体运行结束时变得可收集。
答案 1 :(得分:1)
在变量退出范围之前,两者都不会收集垃圾。 Javascript中的范围由函数引入。循环结构对范围没有任何影响。
答案 2 :(得分:0)
就垃圾收集而言,其他答案所说的应该是真的,浏览器处理垃圾收集,如果变量在内部或外部声明为循环,则无关紧要。
至于效率,你的代码在循环之前声明变量会更加优化。