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