对于(;;)循环说明

时间:2017-06-11 07:39:44

标签: javascript for-loop

在JS中,我偶然发现了一种for for(;;)的for循环,其功能类似于while(true)循环。分号在for循环的括号中起什么作用?

7 个答案:

答案 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++));