我目前正在通过从头开始重新制作游戏来学习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]);
}
}
(是的,我知道只有当一个区块旁边没有地雷时才能触发此功能,这对测试来说更容易)
答案 0 :(得分:2)
您需要将i
声明为本地变量:
var i;
在函数的顶部会这样做。实际上,它隐含地全局,因此递归调用会破坏父上下文中i
的值。