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