我需要清楚地解释这些嵌套的 For 循环

时间:2021-01-18 08:00:21

标签: javascript

let n = 5;

for (let i = 0; i <= n; i++) {
    for (let j = 0; j < i; j++) {
        console.log(i, j);
    }
}

输出:

1 0
2 0
2 1
3 0
3 1
3 2
4 0
4 1
4 2
4 3
5 0
5 1
5 2
5 3
5 4

如果我没记错的话,一旦内循环执行完毕,外循环就会递增,但我无法理解的是为什么 j 在某些点打印 0。递增时不会重新定义已初始化的表达式吗?

3 个答案:

答案 0 :(得分:2)

外循环的每次迭代都会从头开始评估整个内循环(包括将 j 初始化为从零开始)。

  • 第一次外循环迭代:
    • i 设置为 0。
    • 第一次内循环迭代:
      • j 设置为 0。
      • 内部循环条件 j < i 为 False,因为它们都为零。
      • 内循环体不运行。
  • 第二次外循环迭代:
    • i 递增到 1。
    • 第二次外循环迭代中的第一次内循环迭代:
      • j 设置为 0。
      • (i=1,j=0) 记录到控制台
    • 第二次外循环迭代中的第一次内循环迭代:
      • j 递增到 1,内部循环条件为 False。内循环不会第二次运行。
  • 第三次外循环迭代:
    • i 增加到 2。
    • 第三次外循环迭代中的第一次内循环迭代:
      • j 设置为 0。
      • (i=2,j=0) 记录到控制台
    • 第三次外循环迭代中的第二次内循环迭代:
      • j 增加 1
      • (i=2,j=1) 记录到控制台
  • ...等

答案 1 :(得分:1)

<块引用>

我无法理解的是为什么 j 在某些时候会打印 0。

这与您移动首字母 j 如下所示相同。

let n = 5;
let i = 0;
for ( ; i <= n; i++) {
    let j = 0; //You move the initial `j` here
    for (; j < i; j++) {
        console.log(i, j);
    }
}

如你所见,内循环结束后,i 会增加一个,然后下一次,j = 0

答案 2 :(得分:0)

第一次迭代:

i=0。在内循环中 j =0 初始化所以 j

第二次迭代:

i=1 。在内部循环 j=0 中。 check condition j

第三次迭代:

i=2 。在内部循环 j=0 中。 check condition j

这样嵌套的 for 循环就可以工作了。希望你理解。