我已将代码修剪至我认为相关的部分。该功能在$(document).ready
函数的开始处运行一次。为什么Javascript内部循环会阻止外部循环的断开(即无限循环)?
var evenGaps = [];
const NUMBERED_NEIGHBORS = //some array
var evenLocations = //some array
var gapNumber = 0;
function gapFinder() {
for (var x = 0; x < NUMBERED_NEIGHBORS[evenLocations[i + 2]][1].length; x++) {
if (NUMBERED_NEIGHBORS[evenLocations[i]][1][p] ===
NUMBERED_NEIGHBORS[evenLocations[i + 2]][1][x]) {
var delta0 = evenGaps[gapNumber]["1_Gap"][0] - evenGaps[gapNumber]["2_Filler"][0];
var delta1 = evenGaps[gapNumber]["1_Gap"][1] - evenGaps[gapNumber]["2_Filler"][1];
var delta = [delta0, delta1];
evenGaps.push([]);
evenGaps[gapNumber]["5_Distance"] = Math.max(Math.abs(delta[0]),
Math.abs(delta[1]));
if (Math.abs(delta[0]) === Math.abs(delta[1])) {
evenGaps[gapNumber]["6_Single Path?"] = true;
} else {
evenGaps[gapNumber]["6_Single Path?"] = false;
};
if (evenGaps[gapNumber]["6_Single Path?"] &&
evenGaps[gapNumber]["5_Distance"] >= 2) {
//THE ISSUE ARISES WHEN THE LINE BELOW IS ADDED
for (var i = 0; i < evenGaps[gapNumber]["5_Distance"]; i++) {}
}
gapNumber++;
}
}
}
我能够在Chrome中运行代码时没有问题,因为它没有包含最后一个for循环。即使我将它作为一个空循环运行,仍然会出现无限循环,但是,它是拒绝中断的外循环(我知道这一点,因为我已将信息printint添加到内循环之上的控制台)。这通常只发生在我快速重新加载页面时。如果我删除了那一行代码,我可以在没有问题的情况下尽可能快地重新加载它。当我尝试在Firefox中运行它时,它似乎也进入了循环,但Firefox使用停止脚本对话框停止了它,但是它显示了错误的脚本,因为我说的for()循环导致了这个问题。
此外,我正在使用一个非常简单的Node.js服务器。
NUMBERED_NEIGHBORS [evenLocations [i + 2]] [1] .length'表达式中的'i'变量来自哪里? – zerkms