我试图创建一个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;
如果我只能递增直到其值为4,这怎么可能?
答案 0 :(得分:1)
答案 1 :(得分:0)
i的测试条款&lt;在每个循环开始时评估图5;如果为false,则循环退出(将值保留为5)。 i ++部分总是在迭代结束时发生,这意味着在循环中处理数字4之后,它将其递增到5,然后它循环到循环的顶部,再次检查条件(i <5它失败了,但是i的值没有反转回4。
答案 2 :(得分: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);
&#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)
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)
var array = [1, 2, 3, 4];
array.forEach(function(value) {
document.write(value + "<br />");
});
document.write("Values processed: " + array.length);
&#13;
不,我不是在开玩笑。尽可能使用数组,它们将为您省去很多麻烦。您实际上要求的副作用可能导致难以跟踪的错误(
i
看起来只是用于循环,想象循环和最后一个document.write
之间的大量行。 for
循环存在off-by-one error问题。
一旦你的代码开始做有意义的事情(你不想数到4,你呢?),你最终可能会得到一个数组。所以,请帮助所有强大的Array methods。