JavaScript只有函數範圍。因此,在for循環中聲明的變量對於整個函數是可見的。處理在多個for循環中聲明的變量的最習慣的方法是什麼?
例如,
function foo() {
for(var i = 0; i < n; i++) {
// Do something
}
// i is still in scope here
}
當我們有多個for循環,這打開了我們如何處理這些其他變量的for循環的問題。
我們是否使用不同的變量?
for(var i = 0; i < n; i++) { }
for(var j = 0; j < n; j++) { }
或者我們使用相同的變量,但只是分配一個值(而不是聲明它)?
for(var i = 0; i < n; i++) { }
for(i = 0; i < n; i++) { }
或者聲明i
以外的循環?
var i;
for(i = 0; i < n; i++) { }
for(i = 0; i < n; i++) { }
或redeclare i
?
for(var i = 0; i < n; i++) { }
for(var i = 0; i < n; i++) { }
所有這些工作(或至少他們在我的瀏覽器的最新版本上)。雖然,JSHint不喜歡最後一種方法。
有沒有一種最習慣的方法?
我會使用最後兩個之一。儘管JSHint的投訴,我喜歡最後一個;如果我必須保持沉默,我會使用前一個。 – Barmar
爲了記錄,JavaScript正在獲得塊範圍。所以,今後,你還會['for(let i ...)'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/let),它會將'i'聲明爲循環的本地。 –
我更喜歡在兩個循環之外聲明'i'(但不一定在函數的頂部 - 請不要將它們全部放在一行/逗號分隔的位置),但是如果您發現自己正在執行此操作太多了,也許你需要更多的功能? – Ryan