Javascript 函数中的递归结束得太快

Recursion Ending Too Soon in Javascript Function

我目前正在通过从头开始重制游戏来学习JavaScript,我目前的项目是扫雷。在尝试创建递归函数以显示单击的 space 周围的 space 时,我 运行 发现它结束得太早似乎没有任何原因。

您可以在这里阅读整个代码(到目前为止):pastebin.com

或仅参考下面的独立函数:

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]);
  }

}

(是的,我知道这个函数不应该只在一个方块旁边有零个地雷时触发,这只是为了测试目的更容易)

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

var i;

在函数的顶部就可以做到。实际上,它是隐式的 global,因此递归调用会弄乱父上下文中 i 的值。