2012-03-30 68 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