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

标签 javascript recursion minesweeper

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

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

}

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

最佳答案

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

var i;

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

关于javascript - Javascript 函数中的递归结束得太快,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44477697/

相关文章:

java - 递归 - 试图理解

javascript - 太多的递归?

java - 如何检查严格格式的输入?

java - MineSweeper 揭示邻居帮助需要 java

javascript - Electron - 关闭初始窗口但让 child 保持打开状态

javascript - 点击时设置 Cookie

javascript - 如果我将一个元素从一个容器移动到另一个容器,是否存在范围问题?

javascript - 获取裁剪线可见区域长度 d3

python - 通过单击按钮更改按钮文本不起作用

java - 仅使用 +、- 和递归检查数字是否为偶数