2017-03-27 90 views
-5

我試圖做一個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?

+6

這就是循環停止的原因,因爲基本上'i'具有'5'值,並且由於您已經將'i'變量設爲全局變量,所以您可以在'for'循環之外訪問它,並且它保存'5'值。 –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Arithmetic_Operators#Increment_() – j08691

+0

'i ++'發生在每次迭代結束時,所以當'i'等於4,你把它寫到文檔中,然後'i'增加到5--這就是'i <5'爲false並且循環停止,'i'現在是'5'。 – skyline3000

回答

1

您可以在最後表達部分移入for statement條件部分,其中增量發生僅當值大於4小。

var i; 
 
for (i = 0; i < 4 && ++i;) { 
 
    console.log(i);   // 1 ... 4 
 
} 
 

 
console.log('last value', i); // 4

0

i的< 5所述的測試條在每個循環的開始被評估;如果它是假的,則循環退出(將值留在5處)。 i ++部分總是在迭代結束時發生,這意味着在循環中處理了數字4之後,它將它遞增到5,然後它循環到循環的頂部,在那裏它再次檢查條件(i < 5 ),該失敗,但i的值不反轉回4.

-1
  • 環路塊的要被處理的條件是i < 5,從而i必須小於5其內的語句和表達式來被評估
  • 你每增加一個i加1
  • i等於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

-1

請使用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

0

在聲明中循環語句的變量,它存儲在同一範圍內循環的變量。在循環結束時循環增加(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);

-1
  1. 您已聲明我作爲全局變量。
  2. 這就是for循環的工作原理。

for (initialization, condition, increment/decrement) { 
 
    
 
    }

您已初始化1和它滿足I < 5,以便在其進入循環和打印照片i的條件。之後它會執行遞增/遞減操作,並在您的情況下將值增加1。所以雖然我= 4和我< 5它進入循環和打印4,但之後,它執行增量操作,並增加我的價值爲5.

在下一步,因爲條件我< 5不是滿意,所以它打破了循環,並去到最後一個聲明,你正在打印我,即5。

希望現在很清楚。

-1

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