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