Javascript函数中的递归结束过快

Javascript函数中的递归结束过快,javascript,recursion,minesweeper,Javascript,Recursion,Minesweeper,我目前正在通过从头开始重新制作游戏来学习JavaScript,我目前的项目是扫雷。在尝试创建递归函数以显示单击空间周围的空间时,我遇到了这样一个问题:它似乎无缘无故地过早结束 您可以在此处阅读整个代码(到目前为止): 或仅参考以下独立功能: function showAdjacent(block) { if(block.minesNextTo != 0) return; console.log(block.row+','+block.col); block.uncover

我目前正在通过从头开始重新制作游戏来学习JavaScript,我目前的项目是扫雷。在尝试创建递归函数以显示单击空间周围的空间时,我遇到了这样一个问题:它似乎无缘无故地过早结束

您可以在此处阅读整个代码(到目前为止):

或仅参考以下独立功能:

function showAdjacent(block) {

  if(block.minesNextTo != 0)
    return;

  console.log(block.row+','+block.col);
  block.uncovered = true;
  block.hidden = false;

  console.log(block.adjacentBlocks.length);

  for(i = 0; i < block.adjacentBlocks.length; i++)
      block.adjacentBlocks[i].hidden = false;

  for(i = 0; i < block.adjacentBlocks.length; i++) {
    if(!block.adjacentBlocks[i].uncovered)
        showAdjacent(block.adjacentBlocks[i]);
  }

}
功能显示相邻(块){
如果(block.minesnexto!=0)
返回;
log(block.row+','+block.col);
block.uncovered=true;
block.hidden=false;
console.log(block.adjacentBlocks.length);
对于(i=0;i

(是的,我知道此函数不应仅在块旁边有零地雷时触发,这更便于测试)

您需要将
I
声明为局部变量:

var i;

在函数的顶部将执行此操作。实际上,它是隐式的全局的,因此递归调用会弄乱父上下文中
i
的值。

非常感谢!我现在正大声笑着说,这是多么愚蠢的一个错误,它是如何在这么长的时间里被发现的!