【问题标题】:For (;;) loop explanationfor (;;) 循环解释
【发布时间】:2017-06-11 07:39:43
【问题描述】:

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

【问题讨论】:

  • 你接受什么答案?有几个很好的答案

标签: javascript for-loop


【解决方案1】:
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
}

简而言之,当您没有条件或初始化时,它会变成无限循环。

【讨论】:

    【解决方案2】:

    for循环由三部分组成:

    for (INITIALIZATION; CONDITION; AFTERTHOUGHT)
    {
    }
    

    如果省略这些部分,则整体将被评估为:

    for(; true ;)
    { }
    

    初始化和事后思考被忽略了。

    【讨论】:

      【解决方案3】:

      通常,一个for循环头包含3部分:

      for (var i = 0 ; i < 10 ; i++)
      //   ^^^^^^^^^   ^^^^^^   ^^^
      

      您首先初始化一个变量,检查条件,如果为真,执行循环体所说的任何操作,然后递增 i

      您可能不知道 for 循环标头的任何部分都可以省略。如果省略第一部分,则不会初始化任何变量。如果第二部分被省略,则没有条件检查。它总是假设条件为真。

      所以for(;;) 基本上是一个无限循环,因为它省略了 for 循环头的条件部分。每次,条件都为真,所以它会一直持续下去。

      【讨论】:

        【解决方案4】:
        for ( init; condition; increment )
        {
           statement(s);
        }
        

        这是for循环中的控制流程:

        init 步骤首先执行,并且只执行一次。此步骤允许您声明和初始化任何循环控制变量。此处无需声明,只要出现分号即可。

        接下来,评估条件。如果为真,则执行循环体。如果为 false,则循环体不执行,控制流跳转到 for 循环之后的下一条语句。

        在 for 循环体执行后,控制流程跳回到 increment 语句。此语句允许您更新任何循环控制变量。该语句可以留空,只要条件后出现分号即可。

        现在再次评估条件。如果为真,则执行循环并重复该过程(循环体,然后递增步骤,然后再次测试条件)。条件变为假后,for循环终止。

        【讨论】:

          【解决方案5】:

          第一个分号结束初始化语句。

          第二个分号结束条件检查语句。

          在你的情况下,这两个语句都是空的(没有初始化,每个循环都不检查)。

          【讨论】:

            【解决方案6】:

            好吧,我只是猜测一下。 通常一个 for 循环可能是这样的:

            for (i = 0; i < 10; i++)
            

            基本上是这样

            for (;;)
            

            永远都很好,因为循环条件总是得到满足。

            【讨论】:

              【解决方案7】:

              我还能补充的是:

              • 引用source

                此条件测试是可选的。如果省略,则条件始终为真。

              • 我们可以将这三个块中的任何一个留在循环中for

              • 关于循环for 的这种行为的信息类似于 C 语言和其他受 C 启发的语法,例如 C++ em>、Java 等,
              • 使用这种循环的实际示例:

              let i = 1;
              
              for (;;) {
                if (i === 4) {
                  break;
                }
                console.log(i++);
              }
              • 我还要补充一点,for 循环之后的语句块也是可选的(我们只需要将; 放在末尾即可)。为了说明这一点,下面是下一个示例:相当于上面的代码,但在 for 循环中没有块状态:

              for(var i = 1; i &lt; 4; console.log(i++));

              【讨论】:

                猜你喜欢
                • 2010-11-04
                • 1970-01-01
                • 2016-08-20
                • 2023-01-07
                • 2023-04-10
                • 2013-08-31
                • 1970-01-01
                • 2016-07-11
                • 1970-01-01
                相关资源
                最近更新 更多