JavaScript - 变量在for循环问题中递增

时间:2017-03-27 17:33:15

标签: javascript for-loop

我试图创建一个for循环,通过数字1 - 4递增并打印它们,但是当我在循环后打印i的值时,我的代码输出5。



for (i = 1; i < 5; i++) {
  document.write(i + "<br>"); //Outputs numbers 1 - 4
}

document.write("New i: " + i); //Outputs 5
&#13;
&#13;
&#13;

如果我只能递增直到其值为4,这怎么可能?

7 个答案:

答案 0 :(得分:1)

您可以将 final-expression 部分移动到for statement条件部分,只有当该值小于{时,才会发生增量{1}}。

&#13;
&#13;
4
&#13;
&#13;
&#13;

答案 1 :(得分:0)

i的测试条款&lt;在每个循环开始时评估图5;如果为false,则循环退出(将值保留为5)。 i ++部分总是在迭代结束时发生,这意味着在循环中处理数字4之后,它将其递增到5,然后它循环到循环的顶部,再次检查条件(i <5它失败了,但是i的值没有反转回4。

答案 2 :(得分:0)

在循环语句中声明变量时,它将变量存储在与循环相同的范围内。在循环结束时循环增量(i ++),然后检查条件(i <5)以查看它们是否应该重复。在循环之后,变量i仍然存在。请参阅下面的代码段进行播放。

另外,在声明i时应该使用var关键字,否则,变量存储在全局范围内(这是不好的做法)。

&#13;
&#13;
//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);
&#13;
&#13;
&#13;

答案 3 :(得分:-1)

  • 要处理的循环块的条件是i < 5,因此i必须小于5才能对其中的语句和表达式进行评估
  • 每次传递时,i增加1
  • i等于4时,再次将其递增1,使i等于5. i < 5不再为真,因此循环块内不会执行< / LI>
  • 没有什么能让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

答案 4 :(得分:-1)

请使用count变量,因为在每次执行语句后i值会增加。即你的循环完成后,我将永远是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

答案 5 :(得分:-1)

  1. 您已将i声明为全局变量。
  2. 这就是for循环的工作原理。
  3.  for (initialization, condition, increment/decrement ) {
        
        }

    你已经初始化为1并且它满足条件i&lt; 5所以它进入循环并打印i。之后它会执行递增/递减操作,并在您的情况下将值增加1。因此,当i = 4且i <5时,它进入循环并打印4,但之后它执行递增操作并将i的值增加到5.

    在下一步中,由于条件i&lt; 5不满足,所以它打破循环并转到最后一个语句,在那里打印i,即5。

    希望现在很清楚。

答案 6 :(得分:-1)

&#13;
&#13;
var array = [1, 2, 3, 4];
array.forEach(function(value) {
  document.write(value + "<br />");
});
document.write("Values processed: " + array.length);
&#13;
&#13;
&#13;

不,我不是在开玩笑。尽可能使用数组,它们将为您省去很多麻烦。您实际上要求的副作用可能导致难以跟踪的错误(i看起来只是用于循环,想象循环和最后一个document.write之间的大量行。 for循环存在off-by-one error问题。

一旦你的代码开始做有意义的事情(你不想数到4,你呢?),你最终可能会得到一个数组。所以,请帮助所有强大的Array methods