[英]What is the main difference between these two loops as a solution to this exercise? (learning javascript)
[英]What is the difference between the two nested loops in javascript?
function a() {
var n1 = 0,
n2 = 0;
for (; n1 < 100; n1++) {
for (; n2 < 100; n2++) {
console.log(2);
}
console.log(1);
}
}
a();
function b() {
for (var n1 = 0; n1 < 100; n1++) {
for (var n2 = 0; n2 < 100; n2++) {
console.log(2);
}
console.log(1);
}
}
b();
正如你所看到的。两个简单的嵌套循环,看起来它们会有相同的输出。但令我困惑的是函数a()不输出预期的结果,它分别在内外循环100次。有什么区别?
在您的b()
函数n2
变量被
创建
(见@ jfriend00评论)每期间重置 a
循环迭代。 它被设置为0,因此b
循环遍及整个长度(100次)。
在a
变量n1
在内循环之前创建一次,所以第一后a
迭代(和100 b
), n2
具有100的值。在第二个a
互为作用n2
,如果它是小于100。这不是被选中,所以内环在它开始之前结束。
首先,让我们清理变量声明 - 提升和函数范围意味着两个函数看起来都像这样
function a() {
var n1;
var n2;
n1 = 0;
n2 = 0;
for (; n1 < 100; n1++) {
for (; n2 < 100; n2++) {
console.log(2);
}
console.log(1);
}
}
a();
function b() {
var n1;
var n2;
for (n1 = 0; n1 < 100; n1++) {
for (n2 = 0; n2 < 100; n2++) {
console.log(2);
}
console.log(1);
}
}
b();
现在它应该更加明显 - 函数b在每个for循环的开始处将n2设置为零,而函数a则不是。 如果这种行为让您感到惊讶,那么请阅读JavaScript中有关函数范围的更多信息。
在a()n2中只有一次,但在每次n1改变时b()inited
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.