例如,假设我有正常的循环:
for(var i = 0; i < 25; i++)
{
//code executes here
}
注意i++
我知道它迭代循环但是,我很想知道我是否可以迭代循环中的其他地方。像这样:
for(var i = 0; i < 25)
{
//code executes here
i++;
}
我试图实现它,但它没有用。是否可以这样做?
答案 0 :(得分:5)
for
循环标题中必须有第三个表达式,但它不必执行任何操作,实际上可以为空。所有你需要的是分号。
for(var i = 0; i < 25; )
{
//code executes here
i++; // increments "outside of initial conditions"
}
请注意for
循环结构以它的形式存在,因为这是一种非常常见的模式,并且只要有可能就坚持使用它是避免不愉快错误的好主意。例如,这意味着您必须小心循环体中的continue
语句:
for (var i = 0; i < 25; ) {
// code ...
if (whatever)
continue;
// code ...
i++;
}
continue
循环中的for
语句评估第三个标头表达式,但它将跳过循环体内的表达式。
答案 1 :(得分:1)
您可以将任何语句组合用于C风格的“for”循环。
<强>初始化程序强>
第一个语句是初始化程序。这可能是空白的。
for (var i = 0; ...) // initializing in loop
for (; ...) // initializing outside of loop
休息条件
下一个语句是条件:除非循环中有break语句,否则通常不能为空,否则for循环将变为无限。这是“for”循环和“while”循环之间的最大区别,所以不要忽略它。
for (;;) {
break;
}
<强>增量器强>
最后的陈述是增量。这会增加该值,以便触发中断条件。只要循环的所有分支都将增加值,您也可以轻松省略它。
for (var i = 0; i < 25;) {
i++; // here's our incrementor
}
为什么C风格的循环在循环中有条件
将完整的C风格for循环分解为每个部分,执行以下操作:
var i = 0;
for(;;) {
if(i < 25) {
// your normal code would go here
i++;
}
else {
break;
}
}
有很多好的原因,它被压缩到“for”循环中的单个块中:编写这样的代码很冗长,容易出错,并且很容易意外地创建无限循环(崩溃程序或耗尽CPU直到程序退出)。
为什么您的示例失败
你需要明确声明你有一个空白语句,循环内至少有2个分号(3个语句)。否则,无法解释代码。以下行只有2个分号:
for(var i = 0; i < 25)
正确的行如下:
for(var i = 0; i < 25;)
<强>文摘强>
分解for循环以更改中断条件或增量器是不良形式。不要这样做。但是,如果您必须,这可能是想要使用“while”循环的情况。通常,您希望将所有合适的“while”循环转换为“for”循环,但很少有例外。请注意:这很容易导致无限循环,耗尽资源直到你结束解释器。 “For”循环可以保护你免受这种伤害。
答案 2 :(得分:0)
您可能对break和continue语句感兴趣。它们可以让您更好地控制循环。
//test if prime
var testInt = 42
for(int i = -10; i < testInt; i++) {
if(i<2) continue;
if(testInt%i==0) break;
}
如果没有事先更改变量的值,请确保没有调用continue。否则会创建一个无限循环。
javascript中的无限循环非常糟糕。它冻结了浏览器和调试器,这意味着它很难调试。