0
我經常看到的習慣:在for循環或if塊中聲明你的變量是否有問題?
var foo, bar;
for(var i = 0; i < 5; i++) {
foo = '' + foo + i;
}
它也關閉擦到我,但我剛剛意識到我不知道爲什麼我這樣做。
我經常看到的習慣:在for循環或if塊中聲明你的變量是否有問題?
var foo, bar;
for(var i = 0; i < 5; i++) {
foo = '' + foo + i;
}
它也關閉擦到我,但我剛剛意識到我不知道爲什麼我這樣做。
這樣做沒有問題,但是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」語句你資源。這不是什麼大不了的事情,但是隨着時間的推移他們肯定會加起來。
取決於縮小。一個* good * minifier將會把兩個代碼的語義等價。但是+1「這樣做沒有問題..」 – 2012-11-10 03:30:01
只要你意識到沒有塊範圍,只有函數範圍,沒有錯。 –
它的錯在於代碼暗示該變量是在該語句中聲明的,這不是真的。變量名在函數調用的開始處被綁定,*之前執行函數體的任何語句。爲了遵守這種行爲,建議變量聲明語句只出現在函數代碼的開頭,在任何其他類型的語句之前。 –
可能重複的[JavaScript變量聲明外部或內部循環?](http://stackoverflow.com/questions/3684923/javascript-variables-declare-outside-or-inside-loop) –