简单for循环的结果令人困惑

时间:2020-04-13 19:47:37

标签: javascript loops for-loop

这个简单的for循环的结果让我有些困惑

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

console.log打印i的值,从0到9。

但是,当我检查i的值时,浏览器中的开发工具会给我10。

有人可以向我解释为什么我的价值在这里是10吗?我的循环(i < 10)中的条件不允许它超过9。

如果我在这里循环一个数组,我会得到它。我将拥有索引值和array.length,该值始终高于最高索引号。

那么谁能解释我发生了什么事?

[更新]感谢您的即时答复和帮助! 我支持每一个正确的答复。但是“绿色复选标记”去了首先给出全面回答的人。

4 个答案:

答案 0 :(得分:2)

您已经回答了自己的问题:

i < 10不再成立时,您的循环条件将中止循环。因此,反过来考虑,i必须为10或更高才能使循环中止!因此,您看到i的末尾有10

这是发生了什么

  • ...
  • i9
  • i < 10是真的
  • 您的循环主体执行(最后一次)
  • i++执行,使i 10
  • i < 10不再正确
  • 您的循环已终止
  • 现在看i,您会看到10,因为在我的解释中它早于3个步骤就获得了该值

如果您想知道如何在循环外看到i,那是因为var创建了作用域变量。 i在整个函数中都可用,甚至在循环之前(在undefined之后)也可用。要创建块范围的变量,可以改用let

如果您单步执行代码,则可以在调试器中非常清楚地看到整个过程(查看控制台输出,当前位置以及右侧监视区域中的i变量内容):< / p>

gif

答案 1 :(得分:2)

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

大致等同于

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

如您所见,首先检查循环条件,然后进行增量。循环结束时,当i == 9时,循环将在上一次执行时求值,i递增,条件不再成立。

因此,循环终止时i10

答案 2 :(得分:2)

您设置循环,以增加i直到条件成立。

这是for循环的工作方式:

  1. 执行初始化程序(i=0
  2. 检查条件(是i <10吗?)
  3. 如果为true,请循环执行代码(console.log(i)
  4. 执行循环后操作,在这种情况下为i++
  5. 从第2点开始重复直到条件不再成立

i=9的条件最后一次为真时(2),执行循环代码(3),执行循环后动作,以便i=10(4),再次检查条件,由于条件不再成立,循环终止。

但是现在i=10

答案 3 :(得分:2)

understand the purpose of each the 3 (optional) expressions in a for-loop很重要:

1)初始化表达式

一个表达式(包括赋值表达式)或变量 声明在循环开始前评估一次。通常用于 初始化计数器变量。该表达式可以选择声明 带有var或let关键字的新变量。用var声明的变量 不在循环中,即它们在for的相同范围内 循环进入。用let声明的变量在语句本地。 该表达式的结果将被丢弃。

2)条件表达式

在每次循环迭代之前要求值的表达式。如果这 表达式的计算结果为true,将执行语句。这个条件 测试是可选的。如果省略,则条件始终为true。 如果表达式的计算结果为false,则执行跳至第一个 for构造之后的表达式。

3)最终表达式

在每次循环迭代结束时要评估的表达式。这个 在下一次条件评估之前发生。一般用来 更新或增加计数器变量。

基于这些定义,很明显,当i == 9的条件表达式将求值为true时,将执行您的最终表达式。看到最终表达式使i增加1,9然后变成10