雖然我知道關閉和範圍。我需要關於下面一段代碼的詳細解釋。解釋爲什麼for循環在JavaScript中表現得像這樣?
for (var i = 0; i < 10; i++) {
i // no console.log
}
輸出
爲什麼會不顯示從0到9的? 在Chrome開發者控制檯上運行。
雖然我知道關閉和範圍。我需要關於下面一段代碼的詳細解釋。解釋爲什麼for循環在JavaScript中表現得像這樣?
for (var i = 0; i < 10; i++) {
i // no console.log
}
輸出
爲什麼會不顯示從0到9的? 在Chrome開發者控制檯上運行。
你的問題有點含糊,但你似乎在問爲什麼輸出將在9
結束,而不是10
(儘管在你的例子中,你沒有提供輸出方法)。
你的循環使用<
運算符來比較i
和10
不變,轉化爲「小於10
」。由於您正在遞增整數,所以9
將是您的循環超出< 10
範圍之前的最後一個整數,從而跳出循環。
如果你期待10
作爲最終的輸出,你可以使用「小於或等於」運算符(<=
)比較i
和10
。
編輯
編輯完你原來的問題,以及它的答案在another Stack Overflow answer最好概括:
所有語句在JavaScript中有一個值,其中包括在循環結構中執行塊 。一旦循環塊被執行, 最終值被返回(或
undefined
如果沒有操作發生)。 隱式提供返回值「100」的語句是numbers[i] = i+1;
,因爲i + 1的最終迭代產生100,並且 賦值操作返回正在分配的值。
如果你在控制檯中運行它,那是因爲控制檯顯示它運行的程序中最後一條語句的最終結果。
就你而言,for
循環給出的最終值爲9
。
雖然我在談論給出結果的for
語句(因爲語句沒有給出結果)似乎很奇怪,但它們實際上給出了關於整個程序執行的結果。無論執行什麼代碼,都可以得到這個結果。
下面是一個例子。你可以用eval()
來做同樣的事情,這會給你最後的結果。
var n = eval('for(var i = 0; i < 3; i++) {i}');
console.log(n);
這會給你2
在控制檯程序eval
倒是即使唯一的結果可能來自for
環,它返回它的最後一個循環的最後一條語句結果的結果。
如果不在控制檯中,輸出發生在哪裏? –
語句碰巧有一個完成值,這就是您在控制檯中執行它們時得到的結果。它與封閉或範圍無關。 – Bergi
如果您在控制檯中運行該代碼,它會自動顯示「i」的最後一個值 - 在本例中爲9.在實際腳本中不會出現這種情況。如果你只是在控制檯輸入「i = 9」,它也會輸出「9」。 – Blazemonger