2012-11-10 74 views
0

我經常看到的習慣:在for循環或if塊中聲明你的變量是否有問題?

var foo, bar; 
for(var i = 0; i < 5; i++) { 
    foo = '' + foo + i; 
} 

它也關閉擦到我,但我剛剛意識到我不知道爲什麼我這樣做。

+5

只要你意識到沒有塊範圍,只有函數範圍,沒有錯。 –

+0

它的錯在於代碼暗示該變量是在該語句中聲明的,這不是真的。變量名在函數調用的開始處被綁定,*之前執行函數體的任何語句。爲了遵守這種行爲,建議變量聲明語句只出現在函數代碼的開頭,在任何其他類型的語句之前。 –

+0

可能重複的[JavaScript變量聲明外部或內部循環?](http://stackoverflow.com/questions/3684923/javascript-variables-declare-outside-or-inside-loop) –

回答

3

這樣做沒有問題,但是JavaScript沒有塊級作用域,所以如果你在循環中聲明瞭foo,它仍然可以在整個函數中訪問。

有做微小的時候,如果你聲明所有的變量前面小的優勢,可以考慮:

// Up front 
var a, b, c, aVal, bVal, cVal; 

for (a = 0; a < 5; ++a) { 
    aVal = a; 
} 

for (b = 0; b < 5; ++b) { 
    bVal = b; 
} 

for (c = 0; c < 5; ++c) { 
    cVal = c; 
} 

// Inline 
for (var a = 0; a < 5; ++a) { 
    var aVal = a; 
} 

for (var b = 0; b < 5; ++b) { 
    var bVal = b; 
} 

for (var c = 0; c < 5; ++c) { 
    var cVal = c; 
} 

在這種情況下,當你縮小會有大量出現在更多的「VAR」語句你資源。這不是什麼大不了的事情,但是隨着時間的推移他們肯定會加起來。

+0

取決於縮小。一個* good * minifier將會把兩個代碼的語義等價。但是+1「這樣做沒有問題..」 – 2012-11-10 03:30:01

相關問題