递归在Javascript函数中很快结束

时间:2017-06-10 20:20:10

标签: javascript recursion minesweeper

我目前正在通过从头开始重新制作游戏来学习JavaScript,而我目前的项目是Minesweeper。在尝试创建一个显示点击空间周围空间的递归函数时,我遇到了它看起来没有理由而过早结束的问题。

您可以在此处阅读整个代码(目前为止):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]);
  }

}

(是的,我知道只有当一个区块旁边没有地雷时才能触发此功能,这对测试来说更容易)

1 个答案:

答案 0 :(得分:2)

您需要将i声明为本地变量:

var i;

在函数的顶部会这样做。实际上,它隐含地全局,因此递归调用会破坏父上下文中i的值。