[英]Inside and outside of for-loop in JavaScript
我是JavaScript新手,所以有人可以解释一下(我认为)这种奇怪的行为(下面的代码)吗?
尽管循环定义a
小于5,第二个console.log仍将5打印到控制台。此外,第二个console.log在循环之外。 我知道将值赋给“ let”而不是“ var”会产生不同的结果,但是我很好奇JavaScript为什么如此行事。 JavaScript是否会以某种方式“导出”这5个循环?
我有点困惑。
for (var a = 0; a < 5; a++) { console.log("Number inside is " + a); }; // Prints: "Number inside is 0...1...2...3...4" console.log("Number outside is " + a); // Prints: "Number outside is 5
a++
在执行后将变量a
加1。
console.log
内循环,直到值执行的a
保持小于5。然而,最后一个循环迭代之后,当的值a
变为4和它是由内印刷console.log
, a++
递增其值至5,然后将用于-循环条件a<5
失败,循环中断。 之后,编译器执行console.log
for循环,其中的值外a
是已经5。
关键的一点是,for循环中断,只有当价值a
匝5.但是,只要它打破, console.log
内循环将不被执行,编译器会在下一个执行代码行的换环。
此外,您已经在循环外部声明了变量a
,并且即使循环完成了,变量a
范围也存在。
我希望它可以澄清混乱。
用var
声明的变量的范围是其当前的执行上下文,它是封闭的函数,或者对于在任何函数之外声明的变量,都是global
。
在这里,变量a
是globally
声明的,重新声明该变量会使它的original value changed
,
因此,在for循环中运行时,首先将a初始化为0,从而替换为10,而当循环终止于a时等于5,因为5 <5,这是错误的。
因此,将值5合并到外部for循环中。 因此,结论是var
作用域是功能性的,负责变化。
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements/var
当条件结束后循环结束时, console.log ("Number inside is " + a);
它将打印0、1、2、3、4,并且在此循环外将打印5个循环结束,但在其范围内保留一个值并打印5。如果使用let,它将给出10,因为您已声明了变量var a=10
循环上方var a=10
。
由于提升 , a
在第一个循环中被重新分配为0
而不是声明新变量。 这是浏览器执行代码的方式:
var a = 10;
for (a = 0; a < 5; a++) {
console.log ("Number inside is " + a);
}; //Prints: "Number inside is 0...1...2...3...4"
console.log ("Number outside is " + a);
//Prints: "Number outside is 5
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.