繁体   English   中英

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.

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