While 和 For 循环 [关闭]

Posted

技术标签:

【中文标题】While 和 For 循环 [关闭]【英文标题】:While & For-Loops [closed] 【发布时间】:2014-10-21 10:10:37 【问题描述】:

我不明白为什么这个函数可以用作 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 【参考方案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 循环的工作方式如下:

    进行初始化 (x = 0) 做循环体 做增量 (x++) 进行测试 (x &lt; 10) 如果测试为真,则返回步骤 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);
  

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

【讨论】:

以上是关于While 和 For 循环 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

在 for 中插入一个 while 循环。认为这是一个脑筋急转弯[关闭]

WHILE 和 DO-WHILE 循环未执行并卡在输出[关闭]

在while循环中重新初始化数组[关闭]

for 循环与while循环的区别

C增量指针与for()循环性能[关闭]

while循环和for循环