我正在处理一些简单的Javascript代码,而且我确定无法理解。当我输入此代码时,
for (var x = 0; x < 5; x++)
{
console.log(x);
}
自然,它打印出0到4.但如果我添加
for (var x = 0; x < 5; x++)
{
console.log(x);
}
console.log(x);
然后它将打印出0到5.为什么打印出5?
答案 0 :(得分:3)
必须检查并查看x
是否大于5
,否则循环将永远不会结束。
如果x
等于4
,则会运行循环并再次x
再增加1
,使x
返回5
。当它检查x
是否小于5
时,它会评估为false
并结束循环。
因此,当循环结束时,x
等于5
。
答案 1 :(得分:1)
这完全正常!
最后一次迭代不是第5次(打印&#34; 4&#34;,如预期的那样),但是第6次,它发现x
值(&#34; 5&#34) ;)超出了定义的限制。
由于for
语句不是闭包,因此在循环结束时存在var x
个静止图像,因此它会打印其值。
答案 2 :(得分:1)
我理解For while的简短版本。
for(<start>, <condition>, <change>) {
<loop>
}
<end>
等于:
<start>
while(<condition>){
<loop>
<change>
}
<end>
您可以看到<change>
在<loop>
之后,但在下一次<condition>
检查之前。{/ p>
你可以看到,在适用的地方发生了变化。
使用do-while
循环。但在某些情况下,你必须首先检查状况。例:
<start>
if(<condition>){
do {
<loop>
<change>
} while(<condition>);
}
<end>
还有其他方法,但它只是语法,而不是algorythm的变化。
答案 3 :(得分:0)
一些额外的考虑因素。这解释了为什么'x'仍在最后一个console.log(x)的范围内。范围在其他语言中可能不会这样。
请参阅MDN for the "initialization parameters" of a for-loop:
表达式(包括赋值表达式)或变量 宣言。通常用于初始化计数器变量。这个 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,即它们是相同的 for循环所在的范围。此表达式的结果将被丢弃。
来自MDN:
重要说明:JavaScript没有块范围。变量介绍 带有块的范围限定在包含函数或脚本,以及 设置它们的效果持续超出块本身。其他 单词,块语句不引入范围。虽然 “standalone”块是有效的语法,你不想使用 JavaScript中的独立块,因为它们没有按照您的想法执行 他们这样做,如果你认为他们做了像C或Java这样的块。
(这是insertusernamehere和用户2718994从this question开始的答案