解释为什么循环在JavaScript中表现如此?

时间:2015-12-07 21:02:31

标签: javascript console

虽然我知道闭包和范围。我需要对以下代码进行详细解释。

for (var i = 0; i < 10; i++) {
  i // no console.log
}

输出

  

9

为什么不显示0到9?   在Chrome开发者控制台上运行。

2 个答案:

答案 0 :(得分:3)

您的问题有点模糊,但似乎您在问为什么输出会以9而不是10结束(即使在您的示例中,您没有提供输出方法)。

您的循环使用<运算符来比较i10常量,后者转换为“小于10”。由于您按整数递增,9将是循环超出< 10范围之前的最后一个整数,从而突破循环。

如果您希望10作为最终输出,则可以使用“小于或等于”运算符(<=)来比较i10

修改

您已修改原始问题,最好在another Stack Overflow answer总结答案:

  

javascript中的所有语句都有一个值,包括块   在循环结构中执行。一旦执行了循环块,就可以了   返回最终值(如果不进行任何操作,则返回undefined)。   隐含地提供返回值“100”的语句是   numbers[i] = i+1;,因为i + 1的最后一次迭代产生100和   赋值操作返回指定的值。

答案 1 :(得分:1)

如果你在控制台中运行它,那是因为控制台显示它运行的程序中最后一个语句的最终结果。

在您的情况下,for循环的最终值为9

虽然我谈论一个for陈述给出结果似乎很奇怪(因为陈述不给出结果),但他们实际上确实给出了关于执行的结果整个计划。无论执行代码的是什么,都可以获得此结果。

这是一个例子。您可以使用eval()执行相同操作,这将为您提供最终语句的结果。

var n = eval('for(var i = 0; i < 3; i++) {i}');

console.log(n);

即使唯一的结果可能来自2循环,它会在控制台中为eval提供for&#39}。最后一个循环的最后声明结果。