2016-04-21 76 views
0

我已将代码修剪至我认为相关的部分。该功能在$(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服务器。

+0

NUMBERED_NEIGHBORS [evenLocations [i + 2]] [1] .length'表达式中的'i'变量来自哪里? – zerkms

回答

1

你在这个循环中使用的变量i

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

什么样的价值它正在取决于你的代码的其余部分;也许这是一个全球变量;也许它完全没有定义 - 但是你的内部循环会改变这个值,影响外部循环的工作方式。

+0

现在要隐藏我的头。我没有提到这一点,但上面的代码包含在另外两个外部循环中,其中一个使用“i”作为其计数器,这是您推断的(很好的工作)。我改变了线上的计数器变量,它给了我一个问题,现在似乎工作。谢谢! – SuperCodeBrah