我在开源Javascript库中遇到了for
的奇怪语法。
for (;;) {
}
这甚至做了什么?有谁能回答?
答案 0 :(得分:10)
它是“永远循环”,它在C,C ++,C#,Java等中的工作方式相同。你有一个for
语句
答案 1 :(得分:4)
这是一个无限循环,就像while(true)
。
答案 2 :(得分:3)
正如其他人已经指出的那样,如果将永远运行,但你仍然可以用break
结束循环。喜欢:
for (;;) {
if (condition) {
break;
}
}
Mozilla
有一个很好的细分javascript如何评估for
循环:
for ([initialization]; [condition]; [final-expression])
statement
<强>初始化强>
表达式(包括赋值表达式)或变量声明。通常用于初始化计数器变量。这个 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,即它们是相同的 for循环所在的范围。此表达式的结果将被丢弃。<强>条件强>
在每次循环迭代之前要计算的表达式。如果此表达式的计算结果为true,则执行语句。这有条件的 测试是可选的。如果省略,则条件始终计算为true。 如果表达式的计算结果为false,则执行将跳转到第一个表达式 在for构造之后的表达式。<强>最终表达强>
要在每次循环迭代结束时计算的表达式。这发生在下一次条件评估之前。一般用来 更新或增加计数器变量。<强>语句强>
只要条件计算为true就执行的语句。要在循环中执行多个语句,请使用块 声明({...})对这些陈述进行分组。
与此问题最相关的是条件部分:
此条件测试是可选的。如果省略,则始终为条件 评估为真。
答案 3 :(得分:2)
许多语言中的简单/空;
充当空白但真实(可执行)的陈述。
因此,在for循环中,所有三个表达式都是真的,总是匹配,因此会导致无限循环。
它也在Wikipedia上。根据维基页面
使用此样式代替无限
while(1)
循环以避免a 警告Visual C++。
if
语句或while
循环的控制表达式求值为常量。如果while
循环的控制表达式是常量,因为循环将在中间退出,请考虑用for循环替换while循环。您可以省略 for
循环的初始化,终止测试和循环增量,这会导致循环无限(如while(1)
)并且您可以退出循环for声明的主体。
答案 4 :(得分:2)
这对循环for (;;) {}
有效,如果在for循环中没有给出条件,则默认为true。所以循环无限运行。与for (;1;) {}
此外,不仅在Javascript中它的真实性在C,C#语言等等。
阅读本文:Is “for(;;)” faster than “while (TRUE)”? If not, why do people use it?,了解为什么有些程序员可能更喜欢for (;;) {}
而不是简单while(true){}
(有趣)
答案 5 :(得分:0)
它运行无限循环,因为
本质上,for循环是另一个循环的缩短版本,使用此语法
for(a;b;c){
}
是
a;
while(b){
c;
}
所以循环永远,因为b是空的,并且它没有增量运算符来改变任何东西。 基本上,它是无限的无限循环。 编辑:显然,空命令的计算结果为真。