2015-12-02 46 views
0

任何人都可以解釋這裏發生了什麼嗎?循環完成運行後在循環外返回的意外值

for (var i = 0; i < 10; i++) { 
    /* ... */ 
} 
console.log(i); 

//expect 9 as loop states i < 10, however it shows 10 

i記錄,它會顯示出9.從我的理解是,循環將0-9運行值,然後將停循環指出i < 10我期望的那樣。但是,當我console.log(i)它顯示10。任何人都可以解釋爲什麼這是事實嗎?

+3

嘗試將它重寫爲'while'循環,你會看到發生了什麼 –

回答

5

增量發生在之前最後一次檢查。

換句話說,循環結束,當且僅當i >= 10,所以它遵循的循環結束後,i必須至少爲10

環路發生這樣的:

  1. 設置var i = 0;

  2. 檢查是否i < 10(true),執行循環。

  3. 執行i++

  4. 重複步驟2和3,直到i < 10爲假(在這種情況下,直到i = 10)。

+0

可愛,完美的解釋 –

0

由於循環退出時,它不小於10即當i == 10

for循環以下的操作順序:

for(a;b;c) { 
    d; 
} 

是這樣的:

A, repeat(b, d, c) while b==true 

如果最後一條語句是b。這意味着b之前的語句是c

+0

你的_「是這個」_看起來像是'do..while'而不是'while' 。只要把它寫成正常的'while' –

+0

正確。但我試圖用更多的英語類型語義來編寫它,而不是代碼。我原本寫了「A,B,D,C,B,D,C,B」,但是這並沒有真正讓我的想法成爲我想要的。 – Draco18s

0

循環運行,直到i = 10,然後停止。然後,您將控制檯記錄10

1

你有什麼,

for (var i = 0; i < 10; i++) { 
    /* ... */ 
} 
console.log(i); // logs 10 

可以重新寫成while

var i = 0; 
while (i < 10) { 
    /* ... */ 
    i++; 
} 
console.log(i); // logs 10 

而現在我們看到,在i === 9年底有最後一個增量爲i === 10,導致條件失敗,從而退出循環。

+0

也是一個很好的解釋。謝謝保羅。相當基本的東西,但從未如此明確地注意過它。現在很好理解它 –