2012-03-30 69 views
4

据我所知,最常见的做法将是把var a,b;在上面,但我想提取每一个可能的字符(在JS丑化运行后),似乎并没有删除不必要var初始化在这种情况下初始化变量的正确方法?

我想知道是否有下面的会导致问题和建议

案例1:

if(condition){ 
    var a=-1; 
    var b="++"; 
}else{ 
    var a=1; 
    var b="--"; 
} 

案例2:

if(condition){ 
    var a=-1; 
    var b="++"; 
}else{ 
    a=1; 
    b="--"; 
} 

案例3:

if(condition){ 
    a=-1; 
    b="++"; 
}else{ 
    var a=1; 
    var b="--"; 
} 
+3

取决于你想要什么样的范围。 – c0deNinja 2012-03-30 19:19:18

+1

我不是100%确定,但不会没有'var'的行创建全局变量? – 2012-03-30 19:19:51

+1

你打算在if语句之外使用变量a和b吗? – c0deNinja 2012-03-30 19:20:57

回答

4

没关系,因为JavaScript有函数范围,不是词法范围。

你可以把它看作是每一个var ...;声明被分流至多他们所在的函数的顶部。(这是我做什么,至少。)

我写的代码为

var a, b; 
if(condition) { 
    a = -1; 
    b = "++"; 
} else { 
    a = 1; 
    b = "--"; 
} 
+0

它似乎从Wiseguy的链接证明了这个真正的http:// stackoverflow。com/questions/6964895/javascript-variable-scope-in​​-the-if​​-statement – Yim 2012-03-30 19:45:07

+0

我改变了接受的答案,因为你实际上说过“是否重要”,而前面接受的答案只是说“建议什么” (我真的不关心缩小版本的最佳实践)和'什么导致了全局变量'(因为我的例子并非如此) – Yim 2012-03-30 19:51:49

7

这是应该的方式:

var a,b; 

if(condition) 
{ 
    a = -1; 
    b = "++"; 
} 
else 
{ 
    a = 1; 
    b = "--" 
} 

变量应该总是在与var关键字的函数的顶部声明。变量作用域处于函数级别,而不使用var使其成为全局变量。在顶部声明它始终确保您知道范围是针对整个函数的(无论如何),所以当另一个程序员查看它并且不知道该范围是在函数级别时,他/她不会感到困惑并认为范围只在有条件的范围内。

+0

对不起,您可能没有阅读我最后的编辑。我想在缩小后提取每个可能的字符 – Yim 2012-03-30 19:20:01

+2

如果不使用var,它将创建一个全局变量。它不会删除它们,因为它们是必需的。 – kemiller2002 2012-03-30 19:21:33

+0

只是最后一件事,为什么如果我在两个'if/else'上添加'var hi = 1;'我可以在'if/else'之外访问它? – Yim 2012-03-30 19:31:40