为什么内部Javascript循环会阻止外部循环中断(即无限循环)?

时间:2016-04-21 03:54:56

标签: javascript google-chrome loops

我已将代码修改为我认为相关的内容。此函数在$(document).ready函数的开头运行一次。

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++;
    }
  }
}

如果代码中没有包含最后一个for()循环,我可以在Chrome中运行代码而不会出现问题。即使我将它作为空循环运行,仍然会发生无限循环,然而,它是拒绝中断的外循环(我知道这是因为我在控制台上有信息printint&#39;在内环之上)。这通常仅在我快速重新加载页面时发生。如果我删除那一行代码,我可以尽可能快地重新加载它,而不是问题。当我尝试在Firefox中运行它时,它似乎也进入循环但Firefox使用停止脚本对话框停止它,但它显示坏脚本作为for()循环,我说这是导致问题

另外,我使用的是非常简单的Node.js服务器。

1 个答案:

答案 0 :(得分:1)

您在此循环中使用变量i

for (var x = 0; x < NUMBERED_NEIGHBORS[evenLocations[i + 2]][1].length; x++) {

它的价值取决于你的其他代码;也许它是一个全局变量;或许它完全未定义 - 但是你的内部循环正在改变值,影响外循环的工作方式。