JavaScript可以在局部变量之间混淆吗?

时间:2010-08-30 12:12:07

标签: javascript

如果我有一对设置局部变量的函数,例如,常见i循环中的变量for,而另一个正在运行时调用一个,那么有没有名称空间混淆的危险?

3 个答案:

答案 0 :(得分:11)

请记住,JavaScript没有块范围,只有函数范围。

此外,如果您有嵌套循环,则以下示例中只会有一个i变量:

function myFunction() {
  for (var i = 0; i < 10; i++) {
    for (var i = 0; i < 10; i++) {
      // code here will run 10 times instead of 100 times
    }
  }
  // variable i is still accessible from here
}

Douglas Crockford建议var语句应该是Code Conventions for the JavaScript Programming Language中函数体中的第一个语句:

  

JavaScript没有块范围,因此在块中定义变量会使经验丰富的程序员与其他C族语言混淆。定义函数顶部的所有变量。

我认为他有一个观点,正如您在下面的示例中所看到的,这不会让读者误以为变量ij被认为是{{1循环块:

for

答案 1 :(得分:4)

只要您使用var,就像这样:

for(var i = 0; i < something; i++)

然后它是本地的,你很好,如果你使用var,你手上有一个全局变量,以及潜在的问题。此外,如果for循环嵌套在另一个循环中,则应为每个循环使用不同的变量名称。

答案 2 :(得分:0)

如果你指的是嵌套循环,那将是一个问题。每次进入第二个for循环时,i的值(先前在外部for循环中设置)将被重置。