1

我想知道为什么看似相等的循环会导致不同的结果。

第一个循环

 for (var i = 0; i < 5; i++) {
    console.log(i);
    }

结果:

  0
  1
  2
  3
  4

结果是完全可以理解和预期的行为。

但是,下面的循环

var i=0;
while ( i<5) {
    console.log(i);
    i++;
}

导致不同的结果,使得

0
1
2
3
4
4

作为编程的初学者,我真的不明白为什么会这样,在这种情况下差异的根源是什么。

4

4 回答 4

3

如果您更改为

var i=0;
while ( i<5) {
    console.log("i is " + i);
    i++;
}

然后您将在控制台中看到它确实输出了正确的值“i 为 0”、1、2、3、4。控制台还输出最后一个评估语句的值,这就是为什么您会看到额外的 4。

如果我for在 Google Chrome 中运行该示例,它会打印一个附加undefined信息,因为它输出最后一个评估语句的值,即 console.log。

于 2013-07-28T07:32:44.793 回答
2

我认为您所看到的是交互式 Javascript 控制台打印的额外值,它是此代码片段的“结果”。

于 2013-07-28T07:32:34.240 回答
2

Javascript 控制台打印for()andwhile()表达式的结果。如果您运行第一个循环控制台:

for (var i = 0; i < 5; i++) {
   console.log(i);
}

结果将是:

0
1
2
3
4
undefined

在这里,它打印出循环var i范围的本地值,因此在它之外。for()undefined

在第二种情况下,只是在var i循环体外部定义了 is,因此它打印了iis not的最新值undefined

于 2013-07-28T07:33:34.880 回答
0

由于似乎正在评估片段,例如通过eval()或 REPL/Console,因此额外4的是循环的返回值。

而且,是的,循环有返回值

  1. 返回(正常,V,空)。

不过,在大多数情况下,它对你来说并不是特别有用,因为尝试检索它通常会给你一个可爱的SyntaxError. :)

var a = for (var i = 0; i < 5; i++) i;
console.log(a);
SyntaxError: Unexpected token for

但是,eval()循环,你可以看到它。

var a = eval('for (var i = 0; i < 5; i++) i;');
console.log(a);
4

返回的值V来自循环的Statement的评估。在上述情况下,这只是i;,这是4最后一次。

对于您的片段,for循环的结果undefined来自console.log(i);while循环的结果4来自i++;

于 2013-07-28T08:39:40.063 回答