javascript循环初学者的差异

时间:2013-07-28 07:28:55

标签: javascript loops for-loop while-loop

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

第一次循环

 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 个答案:

答案 0 :(得分:3)

如果您更改为

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

然后您将在控制台中看到它输出正确的值&#34;我是0&#34;,1,2,3,4。控制台还输出最后一个评估语句的值,这就是为什么你会看到额外的4。

如果我在Google Chrome中运行for示例,则会打印一个额外的undefined,因为它会输出上次评估的语句的值,即console.log。

答案 1 :(得分:2)

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

答案 2 :(得分:2)

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

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

结果将是:

0
1
2
3
4
undefined

此处打印var i的值,该值位于for()循环范围内,因此位于undefined之外。

在第二种情况下,仅在循环体外定义var i,因此它打印的i的最新值不是undefined

答案 3 :(得分:0)

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

而且,是的,循环有return values

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

尽管如此,在大多数情况下,这对你来说并不是特别有用,因为尝试检索它通常会给你一个可爱的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的{​​{1}}循环结果为undefined,而来自console.log(i);的{​​{1}}循环结果为while