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

Isa*_*bow 3 javascript

如果我有一对既设置局部变量的函数,例如,i公共for循环中的变量,又一个在另一个正在运行时调用,那么是否有命名空间混淆的危险?

Dan*_*llo 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
}
Run Code Online (Sandbox Code Playgroud)

Douglas Crockford建议var语句应该是JavaScript编程语言的代码约定中函数体中的第一个语句:

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

我认为他有一个观点,正如你在下面的例子中看到的那样,这不会让读者误以为变量i和变量j都存在于for循环块的范围内:

function myFunction() {
  var i, j;    // the scope of the variables is now very clear
  for (i = 0; i < 10; i++) {
    for (j = 0; j < 10; j++) {
      // code here will run 100 times
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 第一个例子的简单测试用例证明Daniel是对的:http://jsfiddle.net/sAg8P/2/ (2认同)