在JS中,我偶然发现了一种for for(;;)
的for循环,其功能类似于while(true)
循环。分号在for循环的括号中起什么作用?
答案 0 :(得分:7)
for (statement 1; statement 2; statement 3) {
code block to be executed
}
语句1是可选的,在循环(代码块)开始之前执行。
var i = 0;
var length = 10
for (; i < length; i++) {
//The for loop run until i is less than length and you incerement i by 1 each time. javascript doesnt care what you do inside, it just check whether you have variable with name i and length
}
语句2再次可选定义运行循环的条件(代码块)。
var i = 0;
var len = 100;
for (i = 5; ; i++) {
//Here you are just initializing i with 5 and increment it by 1 there is no break condition so this will lead to an infinite loop hence we should always have a break here somehwere.
}
语句3是可选的,每次执行循环(代码块)后都会执行。
var i = 0;
var length = 100;
for (; i < length; ) {
//Here you are just checking for i < length which is true. If you don't increment i or have an break it will turn into infinite loop
}
在没有条件或初始化的情况下,在坚果壳中,它会变成无限循环。
答案 1 :(得分:4)
通常,for循环头包含3个部分:
for (var i = 0 ; i < 10 ; i++)
// ^^^^^^^^^ ^^^^^^ ^^^
首先初始化一个变量,检查条件,如果是,则执行循环体所说的任何内容,然后递增i
。
您可能不知道的是,for循环标头的任何部分都可以省略。如果省略第一部分则不初始化变量。如果省略第二部分,则没有条件检查。它总是假设条件为真。
所以for(;;)
基本上是一个无限循环,因为它省略了for循环头的条件部分。每次,条件都是真的,所以它会一直持续下去。
答案 2 :(得分:3)
第一个半分号结束初始化语句
第二个半分号结束条件检查声明
在你的情况下,两个语句都是空的(没有初始化并且每个循环都没有检查)
答案 3 :(得分:3)
for ( init; condition; increment )
{
statement(s);
}
以下是for循环中的控制流程:
首先执行 init 步骤,并且只执行一次。此步骤允许您声明和初始化任何循环控制变量。只要出现分号,就不需要在此处添加声明。
接下来,评估条件。如果是,则执行循环体。如果为false,则循环体不会执行,控制流会在for循环之后跳转到下一个语句。
执行for循环体之后,控制流会跳回到增量语句。此语句允许您更新任何循环控制变量。只要在条件之后出现分号,此语句就可以留空。
现在再次评估条件。如果为真,则循环执行并且过程自身重复(循环体,然后递增步骤,然后再次测试条件)。条件变为false后,for循环终止。
答案 4 :(得分:3)
for循环由三部分组成:
for (INITIALIZATION; CONDITION; AFTERTHOUGHT)
{
}
如果省略这些部分,则整体评估为:
for(; true ;)
{ }
初始化和思考后才会被忽略。
答案 5 :(得分:1)
嗯,我只是想猜一猜。 通常,for循环可能是这样的:
for (i = 0; i < 10; i++)
所以基本上
for (;;)
永远是好的,因为总是满足循环条件。
答案 6 :(得分:0)
我仍然可以添加的是:
对source的引用,
此条件测试是可选的。如果省略,则条件始终为true。
我们可以在循环for
中保留这三个块中的任何一个,
for
的这种行为类似于 C 语言中的行为以及其他受 C 启发的语法,例如 C ++ , Java 等,
let i = 1;
for (;;) {
if (i === 4) {
break;
}
console.log(i++);
}
for
循环之后的语句块也是可选的(我们只需要将;
放在末尾)。为了说明这一点,这是下一个示例:与上述代码等效,但是在for
循环中没有statmant块:
for(var i = 1; i < 4; console.log(i++));