【问题标题】:While & For-Loops [closed]While 和 For 循环 [关闭]
【发布时间】:2023-04-09 22:04:02
【问题描述】:

我不明白为什么这个函数可以用作 While 循环,而不是用作 For 循环。我正在尝试数到 10 并在每次迭代时打印到控制台。

While 循环:

function oneToTenW() {
  var x = 0;
  while(x < 10) {
    x++;
    console.log ("x is equal to " + x);
  }
}

For循环:

function oneToTenF() {
  for(var x = 0; x < 10; x++);
  console.log ("x is equal to " + x);
}

当我调用 While-Loop 时,我得到了:

oneToTen();
x is equal to 1
x is equal to 2
x is equal to 3
x is equal to 4
x is equal to 5
x is equal to 6
x is equal to 7
x is equal to 8
x is equal to 9
x is equal to 10

而当我调用 For 循环时,我得到了:

oneToTenf();
x is equal to 10

有什么想法吗?

【问题讨论】:

  • 可能是for后面的分号?
  • 正如@Trudbert 所说,只需使用括号来产生迭代
  • 我不认为这是一个错字,我认为这是对; 继续for 循环的误解。有区别。
  • @T.J.Crowder - 你是对的!谢谢。我故意把它放在那里,但会回去复习我的笔记。谢谢。
  • @Padawan:如果您不确定基本语言结构的正确语法,那么最好查看文档以确保您的语法正确。 MDN 是一个不错的资源。 MDN for statement

标签: javascript function for-loop while-loop


【解决方案1】:

因为你多了一个分号

function oneToTenF() {
  for(var x = 0; x < 10; x++);
  // Here -------------------^
  console.log ("x is equal to " + x);
}

所以循环体完全由空语句(;)组成。完成后,console.log 行会运行以显示x 的当前值,即现在的10

要将console.log 行放入循环体中,从技术上讲,您所要做的就是删除;

function oneToTenF() {
  for(var x = 0; x < 10; x++)
    console.log ("x is equal to " + x);
}

...虽然我总是在控制结构上使用块 ({}):

function oneToTenF() {
  for(var x = 0; x < 10; x++) {
    console.log ("x is equal to " + x);
  }
}

其中任何一个都会显示09 的值,因为for 循环的工作方式如下:

  1. 进行初始化 (x = 0)
  2. 做循环体
  3. 做增量 (x++)
  4. 进行测试 (x &lt; 10)
  5. 如果测试为真,则返回步骤 2

【讨论】:

  • 很好的解释。 For-Loop 的一个很好的演练。谢谢 T.J.
【解决方案2】:

这一行就在这里:

for(var x = 0; x < 10; x++);

因为末尾有一个分号,所以该语句有效地在此处终止,并且循环执行而不做任何事情。要让循环执行它下面的语句,您需要将该语句包含在循环体中,方法是删除分号:

for(var x = 0; x < 10; x++)
  console.log ("x is equal to " + x); // <- the line immediately after the for statement will be executed on every iteration

或者通过将要执行的语句或语句括在块中(大括号):

for(var x = 0; x < 10; x++) {
  console.log ("x is equal to " + x);
}

现在该语句将在每次循环迭代时执行。

【讨论】:

    【解决方案3】:

    for 循环后面有一个分号,所以它没有循环。尝试删除那个分号,或者像在 while 循环中那样添加一些括号。

    【讨论】:

      【解决方案4】:

      你错过了 for 循环的主体

      function oneToTenF() {
        for(var x = 0; x < 10; x++) {
          console.log ("x is equal to " + x);
        }
      }
      

      【讨论】:

      • 从技术上讲,循环体并没有丢失。它恰好是一个不符合 OP 要求的声明。但是您的解决方案当然是正确的。 :-)
      【解决方案5】:

      这是因为您将; 放在for 行的末尾:

      for(var x = 0; x < 10; x++);
      

      这将一个空语句作为for 循环的主体,并且console.log() 语句在循环结束后运行

      应该是:

      for(var x = 0; x < 10; x++) {
          console.log ("x is equal to " + x);
      }
      

      【讨论】:

        【解决方案6】:

        因为你多了一个分号。试试下面的一个

        function oneToTenF() {
          for(var x = 0; x < 10; x++){
          console.log ("x is equal to " + x);
        }
        }
        

        【讨论】:

          【解决方案7】:

          正如其他人所说,但我还是会说,

          function oneToTenF() {
            for(var x = 0; x < 10; x++); < Issue is right there. 
               console.log ("x is equal to " + x);
          }
          

          如果你这样做

          function oneToTenF() {
            for(var x = 0; x < 10; x++){
               console.log ("x is equal to " + x);
            }
          }
          

          然后它会给你你想要的结果。大括号和分号的人。

          【讨论】: