2015-12-07 67 views
-5

雖然我知道關閉和範圍。我需要關於下面一段代碼的詳細解釋。解釋爲什麼for循環在JavaScript中表現得像這樣?

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

輸出

爲什麼會不顯示從0到9的? 在Chrome開發者控制檯上運行。

+1

如果不在控制檯中,輸出發生在哪裏? –

+0

語句碰巧有一個完成值,這就是您在控制檯中執行它們時得到的結果。它與封閉或範圍無關。 – Bergi

+0

如果您在控制檯中運行該代碼,它會自動顯示「i」的最後一個值 - 在本例中爲9.在實際腳本中不會出現這種情況。如果你只是在控制檯輸入「i = 9」,它也會輸出「9」。 – Blazemonger

回答

3

你的問題有點含糊,但你似乎在問爲什麼輸出將在9結束,而不是10(儘管在你的例子中,你沒有提供輸出方法)。


你的循環使用<運算符來比較i10不變,轉化爲「小於10」。由於您正在遞增整數,所以9將是您的循環超出< 10範圍之前的最後一個整數,從而跳出循環。

如果你期待10作爲最終的輸出,你可以使用「小於或等於」運算符(<=)比較i10


編輯

編輯完你原來的問題,以及它的答案在another Stack Overflow answer最好概括:

所有語句在JavaScript中有一個值,其中包括在循環結構中執行塊 。一旦循環塊被執行, 最終值被返回(或undefined如果沒有操作發生)。 隱式提供返回值「100」的語句是 numbers[i] = i+1;,因爲i + 1的最終迭代產生100,並且 賦值操作返回正在分配的值。

1

如果你在控制檯中運行它,那是因爲控制檯顯示它運行的程序中最後一條語句的最終結果。

就你而言,for循環給出的最終值爲9

雖然我在談論給出結果的for語句(因爲語句沒有給出結果)似乎很奇怪,但它們實際上給出了關於整個程序執行的結果。無論執行什麼代碼,都可以得到這個結果。

下面是一個例子。你可以用eval()來做同樣的事情,這會給你最後的結果。

var n = eval('for(var i = 0; i < 3; i++) {i}'); 

console.log(n); 

這會給你2在控制檯程序eval倒是即使唯一的結果可能來自for環,它返回它的最後一個循環的最後一條語句結果的結果。

相關問題