我目前正在通过从头开始重新制作游戏来学习 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/