JavaScript:使用var关键字inside和outside循环

时间:2014-07-09 09:46:29

标签: javascript loops memory-leaks var

我的同事和我一直在讨论在循环中使用var关键字的好/坏做法。 这是我的方式:

for (var i = 0; i < anArray.length; i++) {
    for (var j = 0; j < anotherArray.length; j++) {
        var a1 = someValue1;
        var a2 = someValue2;
        var a3 = someValue3;
        var a4 = someValue4;
        var a5 = someValue5;

        ...... //Some other process that involve a1-5
    }
}

我在嵌套for循环中使用了var。假设循环i运行2000次而j运行3000次。我的同事声称​​使用像这样的循环导致内存泄漏,这是一种不好的做法。 这是真的吗?

他说&#34; var应该在循环之外声明,以便变量受功能范围限制,并在范围结束时被销毁。&#34; 这是真的吗?

除了上述关于内存泄漏的声明之外,这是一种不好的做法,如果是这样,为什么呢?

我怀疑,因为我知道(或者可能相信)使用var in循环,当这个函数结束时a1-5仍会被破坏。

2 个答案:

答案 0 :(得分:2)

变量被提升,这意味着对于JavaScript解释器,您的代码如下所示:

var i, j, a1, a2, a3, a4, a5;
for (i = 0; i < anArray.length; i++) {
    for (j = 0; j < anotherArray.length; j++) {
        a1 = someValue1;
        a2 = someValue2;
        a3 = someValue3;
        a4 = someValue4;
        a5 = someValue5;

        ...... //Some other process that involve a1-5
    }
}

所以你宣称它们没有任何区别 - 无论如何它们都有功能范围。

然而,有一个有点有效的论点(尽管可能有争议),你应该在函数的顶部声明所有变量,这样代码看起来和你对解释器的看法一样,而你不要混淆,认为在块内声明的变量在其他地方无效。我猜这只是个人偏好。

答案 1 :(得分:0)

这纯粹是一个样式问题,应该对性能或内存使用没有影响。 Javascript中的变量具有函数范围,无论它们声明的函数位于何处。编译函数时,所有变量声明都被提升到函数的顶部。