所以,我有一个数组,我想检查一些值是否相同或 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 变量两次。
对于初学者:用 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。