2010-08-30 53 views

回答

4

只要你使用var,像這樣:

for(var i = 0; i < something; i++) 

那麼它的地方,你會感覺良好,如果你使用var,你有你的手一個全局變量以及潛在的問題。另外,如果for循環在另一箇中嵌套爲嵌套,則應爲每個循環使用不同的變量名稱。

11

請記住,JavaScript沒有塊範圍,但只有函數範圍。

此外,如果你有嵌套的循環,只會有一個i變量在下面的例子:

function myFunction() { 
    for (var i = 0; i < 10; i++) { 
    for (var i = 0; i < 10; i++) { 
     // code here will run 10 times instead of 100 times 
    } 
    } 
    // variable i is still accessible from here 
} 

Douglas Crockford建議var語句應該是在函數體中第一個語句Code Conventions for the JavaScript Programming Language

JavaScript沒有塊範圍,因此在塊中定義變量可能會使有其他C語言經驗的程序員感到困惑。定義函數頂部的所有變量。

我覺得他有一個點,你可以在下面的例子中看到,這不會混淆讀者誤以爲變量ijfor循環塊的範圍內舉行:

function myFunction() { 
    var i, j; // the scope of the variables is now very clear 
    for (i = 0; i < 10; i++) { 
    for (j = 0; j < 10; j++) { 
     // code here will run 100 times 
    } 
    } 
} 
+0

你的第一個例子不會因爲'var i'被調用兩次而破壞腳本嗎? – 2010-08-30 12:20:59

+0

@Isaac:不,JavaScript會簡單地忽略變量聲明,如果一個變量聲明兩次,如我的第一個例子。顯然,這個循環在這個例子中不會像預期的那樣工作,因爲內部循環會增加外部循環的控制變量。 – 2010-08-30 12:22:30

+2

第一個例子的簡單測試用例證明Daniel是正確的:http://jsfiddle.net/sAg8P/2/ – 2010-08-30 12:47:56

0

這將是一個問題,如果你指的是嵌套循環。每次輸入第二個循環時,i的值(以前在外循環中設置)將被重置。