我想知道为什么看似平等的循环会导致不同的结果。
第一次循环
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
作为编程的初学者,我真的不明白为什么会这样,在这种情况下,差异的来源是什么。
答案 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。
- 返回(正常, 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
的{{1}}循环结果为undefined
,而来自console.log(i);
的{{1}}循环结果为while