我試圖做一個for循環,通過數字1 - 4遞增並打印它們,但是當我在循環後打印i的值時,我的代碼輸出爲5.JavaScript - 變量遞增for for循環問題
for (i = 1; i < 5; i++) {
document.write(i + "<br>"); //Outputs numbers 1 - 4
}
document.write("New i: " + i); //Outputs 5
這怎麼可能,如果我只能遞增,直到它的值是4?
我試圖做一個for循環,通過數字1 - 4遞增並打印它們,但是當我在循環後打印i的值時,我的代碼輸出爲5.JavaScript - 變量遞增for for循環問題
for (i = 1; i < 5; i++) {
document.write(i + "<br>"); //Outputs numbers 1 - 4
}
document.write("New i: " + i); //Outputs 5
這怎麼可能,如果我只能遞增,直到它的值是4?
您可以在最後表達部分移入for
statement的條件部分,其中增量發生僅當值大於4
小。
var i;
for (i = 0; i < 4 && ++i;) {
console.log(i); // 1 ... 4
}
console.log('last value', i); // 4
i的< 5所述的測試條在每個循環的開始被評估;如果它是假的,則循環退出(將值留在5處)。 i ++部分總是在迭代結束時發生,這意味着在循環中處理了數字4之後,它將它遞增到5,然後它循環到循環的頂部,在那裏它再次檢查條件(i < 5 ),該失敗,但i的值不反轉回4.
i < 5
,從而i
必須小於5其內的語句和表達式來被評估i
加1i
等於4時,你再增加1那i
將等於5. i < 5
不再是真的,所以在循環塊內沒有執行i
回一個增量;所以在循環後它保留它可以應用獨特的方式,但一般低於第一和最後一個例子是常用的方法:
var log = console.log;
// Example 1: Decrease Loop Iterator After
for (var i = 1; i < 5; i++)
log(i);
log('New i:', --i); // 4
// Example 2: Count in conditional
var count = 0;
for (var i = 1; i < 5 && ++count; i++)
log(i);
log('New i:', count); // 4
// Example 3: Count in loop body
var count = 0;
for (var i = 1; i < 5 && ++count; i++)
log(i);
log('New i:', count); // 4
請使用count變量,因爲每次執行語句後,我的值都會增加。即你的循環結束後執行後我將永遠5
var count=0;
for (i = 1; i <5; i++) {
document.write(i + "<br>"); //I increases after these statement execution so it will be 5 at last
count=count+1;
}
document.write("New i: " + count); //Outputs 5
在聲明中循環語句的變量,它存儲在同一範圍內循環的變量。在循環結束時循環增加(i ++),然後檢查條件(i < 5)以查看它們是否應該重複。循環之後,變量i仍然存在。請參閱下面的片段,瞭解詳情。
此外,您應該在聲明i時使用var關鍵字,否則該變量存儲在全局範圍內(這是不好的做法)。
//variable i is captured here (with the var keyword)
for(var i = 1; i < 5; i++) {
//for the fourth iteration, i === 4
//so it prints 4.
document.write(i);
//i++ happens right now, so i now is 5.
//then the loop checks the condition to see if it
//should continue. i isn't less than 5, so the loop breaks.
}
//and the value of i is still 5. so this prints 5.
document.write('</br>' + i);
for (initialization, condition, increment/decrement) {
}
您已初始化1和它滿足I < 5,以便在其進入循環和打印照片i的條件。之後它會執行遞增/遞減操作,並在您的情況下將值增加1。所以雖然我= 4和我< 5它進入循環和打印4,但之後,它執行增量操作,並增加我的價值爲5.
在下一步,因爲條件我< 5不是滿意,所以它打破了循環,並去到最後一個聲明,你正在打印我,即5。
希望現在很清楚。
var array = [1, 2, 3, 4];
array.forEach(function(value) {
document.write(value + "<br />");
});
document.write("Values processed: " + array.length);
不,我不是在開玩笑。儘可能地使用數組,它們會爲您帶來很多麻煩。您實際上要求的副作用可能會導致難以跟蹤的錯誤(i
看起來像僅用於循環,想象循環和最後一個document.write
之間的行數很多)。 for
循環出現off-by-one error問題。
一旦你的代碼開始做有意義的事情(你不想數到4,你呢?),你可能無論如何都會得到一個數組。所以請幫助你擁抱所有那些強大的Array methods。
這就是循環停止的原因,因爲基本上'i'具有'5'值,並且由於您已經將'i'變量設爲全局變量,所以您可以在'for'循環之外訪問它,並且它保存'5'值。 –
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_() – j08691
'i ++'發生在每次迭代結束時,所以當'i'等於4,你把它寫到文檔中,然後'i'增加到5--這就是'i <5'爲false並且循環停止,'i'現在是'5'。 – skyline3000