【问题标题】:JavaScript: using the var keyword inside vs. outside loops [duplicate]JavaScript:在循环内部和外部循环中使用 var 关键字 [重复]
【发布时间】:2014-08-30 06:47:19
【问题描述】:

我和我的同事一直在讨论在循环中使用 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 次。我的同事声称 在这样的循环中使用 var 是导致内存泄漏的原因,因此是一种不好的做法。 这是真的吗?

他说“var 应该在循环之外声明,以便变量受制于函数范围并在范围结束时被销毁。” 这是真的吗?

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

我对此表示怀疑,因为我知道(或相信)在循环中使用 var,a1-5 在此函数结束时仍会被破坏。

【问题讨论】:

  • var 关键字放在哪里并不重要。 Javascript 中的变量总是有函数作用域。
  • @Gpx 谢谢。我搜索的时候没有出现。也许是因为我在搜索中使用了 'var 关键字' :(

标签: javascript loops memory-leaks var


【解决方案1】:

这纯粹是一个样式问题,应该不会影响性能或内存使用。 Javascript 中的变量具有函数作用域,无论它们在函数中的哪个位置声明。编译函数时,所有变量声明都被提升到函数顶部。

【讨论】:

    【解决方案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
        }
    }
    

    所以在你声明它们的地方根本没有区别——它们无论如何都有函数作用域。

    但是有一个有点有效的论点(尽管它可能值得商榷),您应该在函数的顶部声明所有变量,这样代码在您看来与在解释器中看起来一样,并且您不要混淆认为在块内声明的变量在其他地方无效。我猜这只是个人喜好。

    【讨论】:

      猜你喜欢
      • 2013-06-07
      • 1970-01-01
      • 2012-05-19
      • 2014-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多