如果我有一对设置局部变量的函数,例如,常见i
循环中的变量for
,而另一个正在运行时调用一个,那么有没有名称空间混淆的危险?
答案 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族语言混淆。定义函数顶部的所有变量。
我认为他有一个观点,正如您在下面的示例中所看到的,这不会让读者误以为变量i
和j
被认为是{{1循环块:
for
答案 1 :(得分:4)
只要您使用var
,就像这样:
for(var i = 0; i < something; i++)
然后它是本地的,你很好,如果你不使用var
,你手上有一个全局变量,以及潜在的问题。此外,如果for
循环嵌套在另一个循环中,则应为每个循环使用不同的变量名称。
答案 2 :(得分:0)
如果你指的是嵌套循环,那将是一个问题。每次进入第二个for循环时,i的值(先前在外部for循环中设置)将被重置。