繁体   English   中英

JavaScript中for循环的内部和外部

[英]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.loga++递增其值至5,然后将用于-循环条件a<5失败,循环中断。 之后,编译器执行console.log for循环,其中的值外a是已经5。

关键的一点是,for循环中断,只有当价值a匝5.但是,只要它打破, console.log内循环将不被执行,编译器会在下一个执行代码行的换环。

此外,您已经在循环外部声明了变量a ,并且即使循环完成了,变量a范围也存在。

我希望它可以澄清混乱。

var声明的变量的范围是其当前的执行上下文,它是封闭的函数,或者对于在任何函数之外声明的变量,都是global

在这里,变量aglobally声明的,重新声明该变量会使它的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM