2013-07-28 44 views
1

我想知道爲什麼看似平等的循環會導致不同的結果。javascript循環對於初學者的差異

第一循環

for (var i = 0; i < 5; i++) { 
    console.log(i); 
    } 

結果:

0 
    1 
    2 
    3 
    4 

結果是完全可以理解的和可預期的行爲。

但是,下面的循環

var i=0; 
while (i<5) { 
    console.log(i); 
    i++; 
} 

導致了不同的結果,使得

0 
1 
2 
3 
4 
4 

作爲編程初學者我真的不明白爲什麼會是這樣,源是什麼在這種情況下的差異。

+3

這是不對的......你確定你有沒有添加了另一個'的console.log(I) 「某處? –

+0

您是否通過在瀏覽器的控制檯中輸入這些代碼片段來測試這些代碼片段? – nnnnnn

回答

2

我想你看到的是由交互式JavaScript控制檯打印的額外值,這是此代碼段的「結果」。

3

如果更改爲

var i=0; 
while (i<5) { 
    console.log("i is " + i); 
    i++; 
} 

那麼你會在它的輸出正確的價值觀控制檯中看到「我是0」,1,2,3,4。控制檯還會輸出最後一次評估語​​句的值,這就是爲什麼您會看到額外的4.

如果我在Google Chrome中運行for示例,它會打印另一個undefined,因爲它會輸出最後一條評估語句的值,這是console.log。

+0

但爲什麼不在 –

+0

這種情況下,你需要在你的答案中添加以下內容:for循環'i'超出範圍,因爲循環終止,原因是最後一個值不同,&+ –

+1

@GrijeshChauhan謝謝您。 –

2

Javascript控制檯打印for()while()表達式的結果。如果您運行的第一個循環控制檯:

for (var i = 0; i < 5; i++) { 
    console.log(i); 
} 

的結果將是:

0 
1 
2 
3 
4 
undefined 

這打印的var i它的值是本地for()循環的範圍,因此undefined外面。

在第二種情況下,只有var i被定義在循環體外部,因此它會打印最新值i而非undefined

+0

但爲什麼'undefined'用於? –

+1

爲什麼'while()'4的結果?另外,由於JavaScript沒有塊範圍(如果在'for'循環之後添加'console.log(i)',它將打印'5''for' '然後'undefined')。 – nnnnnn

+1

@GrijeshChauhan因爲'console.log()'是最後一個表達式'eval()''d並且返回'undefined'。而'i ++'是'while'中的最後一個,導致了'4'。 –

0

由於看起來正在評估片段,例如通過eval()或REPL/Console,額外的4是循環的返回值。

而且,是的,循環有return values

  1. 返回(正常,V,空)。

雖然,它不是東西是特別有用的,你在大多數情況下,作爲試圖找回它通常給你一個可愛的SyntaxError。 :)

var a = for (var i = 0; i < 5; i++) i; 
console.log(a); 
SyntaxError: Unexpected token for 

然而,eval()的循環,你可以看到它。

var a = eval('for (var i = 0; i < 5; i++) i;'); 
console.log(a); 
4 

返回的值,V,來自環的聲明的評價。在上面的情況下,這只是i;,這是上一次的4

爲了您的片段,該for循環的結果是從console.log(i);undefinedwhile循環的結果是4i++;