我已將代碼修剪至我認爲相關的部分。該功能在$(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