这个简单的for循环的结果让我有些困惑
for (var i = 0; i < 10; i++) {
console.log(i);
}
console.log
打印i的值,从0到9。
但是,当我检查i的值时,浏览器中的开发工具会给我10。
有人可以向我解释为什么我的价值在这里是10吗?我的循环(i < 10
)中的条件不允许它超过9。
如果我在这里循环一个数组,我会得到它。我将拥有索引值和array.length,该值始终高于最高索引号。
那么谁能解释我发生了什么事?
[更新]感谢您的即时答复和帮助! 我支持每一个正确的答复。但是“绿色复选标记”去了首先给出全面回答的人。
答案 0 :(得分:2)
您已经回答了自己的问题:
当i < 10
不再成立时,您的循环条件将中止循环。因此,反过来考虑,i
必须为10
或更高才能使循环中止!因此,您看到i
的末尾有10
。
这是发生了什么
i
是9
i < 10
是真的i++
执行,使i
10
i < 10
不再正确i
,您会看到10
,因为在我的解释中它早于3个步骤就获得了该值如果您想知道如何在循环外看到i
,那是因为var
创建了作用域变量。 i
在整个函数中都可用,甚至在循环之前(在undefined
之后)也可用。要创建块范围的变量,可以改用let
。
如果您单步执行代码,则可以在调试器中非常清楚地看到整个过程(查看控制台输出,当前位置以及右侧监视区域中的i
变量内容):< / p>
答案 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
递增,条件不再成立。
因此,循环终止时i
是10
。
答案 2 :(得分:2)
您设置循环,以增加i
直到条件成立。
这是for循环的工作方式:
i=0
)i <10
吗?)console.log(i)
)i++
当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
。