一尘不染

为什么我的循环没有停止,即使它已经结束了?

javascript

所以,我有一个数组,我想检查一些值是否相同或 0。如果不是,它应该调用函数“end”并停止,但它永远不会停止并继续调用函数“end”。

function test() {
    loop:
    for (var x = 0; x < arr.length; x++) {
        if (arr[x] === 0) break;
        else if (x + 1 === arr.length) {
            for (var x = 0; x < 4; x++) {
                for (var y = 0; y < 3; y++) {
                    if (arr[4 + x + y * 4] === arr[x + y * 4]) break loop;
                    if (arr[11 - x - y * 4] === arr[15 - x - y * 4]) break loop;
                }
            }
            for (var y = 0; y < 4; y++) {
                for (var x = 0; x < 3; x++) {
                    if (arr[1 + x + y * 4] === arr[x + y * 4]) break loop;
                    if (arr[14 - x - y * 4] === arr[15 - x - y * 4]) break loop;
                }
            }
            end();
        }
    }
}

编辑:发现问题,我使用了 x 变量两次。


阅读 97

收藏
2022-07-26

共1个答案

一尘不染

对于初学者:用 let 而不是 var 声明循环迭代变量 - 用 var 声明的变量的范围为函数(而 let/const 的范围为代码块/循环)

请参阅以下代码,了解 let/var 如何导致不同的输出

for (var x = 0; x < 3; x++) {
  console.log("outer loop var" + x)
  for (var x = 0; x < 2; x++) {
    console.log("inner loop var" + x)
  }
}

for (let x = 0; x < 3; x++) {
  console.log("outer loop let" + x)
  for (let x = 0; x < 2; x++) {
    console.log("inner loop let" + x)
  }
}

在带有 var 的循环中,两个循环都使用相同的变量-因此仅在外部循环的 1 次迭代后退出循环(内部循环的 + 2 次)(因为 x 达到 3,因为内部和外部循环都使用相同的变量迭代 - 因此在每次迭代后也添加到相同的变量 - 所以退出内部循环,因为 x 达到 2,然后外部循环的第一次迭代结束并添加 1,这意味着 x 变为 3 并退出循环)

int 循环让两个循环都使用自己的变量,所以我们得到了我们预期的外循环的 3 次迭代和我们的内循环的 3 * 2。

2022-07-26