Javascript 为什么console.log在“外部”;至于;循环打印出一个“;额外的;号码?

Javascript 为什么console.log在“外部”;至于;循环打印出一个“;额外的;号码?,javascript,for-loop,Javascript,For Loop,我正在编写一些简单的Javascript代码,有些东西我不确定我是否理解。当我输入这个代码时 for (var x = 0; x < 5; x++) { console.log(x); } for(变量x=0;x

我正在编写一些简单的Javascript代码,有些东西我不确定我是否理解。当我输入这个代码时

for (var x = 0; x < 5; x++)
{
    console.log(x);
}
for(变量x=0;x<5;x++)
{
控制台日志(x);
}
当然,它打印出0到4。但如果我加上

for (var x = 0; x < 5; x++)
{
    console.log(x);
}
console.log(x);
for(变量x=0;x<5;x++)
{
控制台日志(x);
}
控制台日志(x);

然后它将打印出0到5。它为什么打印出5?

它必须检查
x
是否大于
5
,否则循环将永远不会结束

如果
x
等于
4
,它将运行循环,并通过
1
再次递增
x
,使
x
返回
5
。当它检查
x
是否小于
5
时,其计算结果为
false
,并结束循环


因此,当循环结束时,
x
等于
5
,必须检查
x
是否大于
5
,否则循环永远不会结束

如果
x
等于
4
,它将运行循环,并通过
1
再次递增
x
,使
x
返回
5
。当它检查
x
是否小于
5
时,其计算结果为
false
,并结束循环

因此,当循环结束时,
x
等于
5

这是完全正常的

最后一次迭代不是第五次(如预期的那样打印“4”),而是第六次,发现
x
值(“5”)超出了定义的限制

由于
for
语句不是一个闭包,
var x
仍然存在于循环端,因此它会打印它的值。

这是完全正常的

最后一次迭代不是第五次(如预期的那样打印“4”),而是第六次,发现
x
值(“5”)超出了定义的限制


由于
for
语句不是一个闭包,
var x
仍然存在于循环端,因此它会打印其值。

我理解为While的简短版本

for(<start>, <condition>, <change>) {
    <loop>
}
<end>

还有其他方法,但这只是语法,而不是算法更改。

我理解为While的简短版本

for(<start>, <condition>, <change>) {
    <loop>
}
<end>

还有其他方法,但这只是语法,而不是算法更改。

一些其他注意事项。这解释了为什么“x”仍然在最后一个console.log(x)的作用域中。在其他语言中,作用域可能不会以这种方式运行

见:

表达式(包括赋值表达式)或变量 宣言。通常用于初始化计数器变量。这 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,也就是说,它们在同一个循环中 循环的作用域在中。此表达式的结果将被丢弃

发件人:

要点:JavaScript没有块作用域。引入的变量 使用块时,将作用域限定为包含函数或脚本,并且 设置它们的效果将持续到块本身之外。换句话说 字、块语句不引入范围。虽然 “standalone”块是有效语法,您不想使用 JavaScript中的独立块,因为它们不做您认为的事情 如果您认为它们可以在C或Java中执行类似于这些块的操作,那么它们可以


(这是从答案和用户2718994中提取的)

一些额外的注意事项。这解释了为什么“x”仍然在最后一个console.log(x)的作用域中。在其他语言中,作用域可能不会以这种方式运行

见:

表达式(包括赋值表达式)或变量 宣言。通常用于初始化计数器变量。这 表达式可以选择使用var关键字声明新变量。 这些变量不是循环的局部变量,也就是说,它们在同一个循环中 循环的作用域在中。此表达式的结果将被丢弃

发件人:

要点:JavaScript没有块作用域。引入的变量 使用块时,将作用域限定为包含函数或脚本,并且 设置它们的效果将持续到块本身之外。换句话说 字、块语句不引入范围。虽然 “standalone”块是有效语法,您不想使用 JavaScript中的独立块,因为它们不做您认为的事情 如果您认为它们可以在C或Java中执行类似于这些块的操作,那么它们可以


(这是从answers by和user2718994中提取的)

您希望它打印出什么?无论如何,循环在
x<5
时运行,因此当
x
变为
5
时,它退出,但
x
之后仍然是
5
。如果您想知道为什么
x
仍然在作用域中,那是因为
var
声明的变量在JavaScript中具有函数作用域,而不是块作用域。您希望打印出什么?无论如何,循环在
x<5
时运行,因此当
x
变为
5
时,它退出,但
x
之后仍然是
5
。如果您想知道为什么
x
仍然在作用域中,那是因为
var
声明的变量在JavaScript中具有函数作用域,而不是块作用域。
<start>
if(<condition>){
    do {
        <loop>
        <change>
    } while(<condition>);
}
<end>