2017-06-10 5 views
4

Je suis en train d'apprendre le JavaScript en refondant des jeux à partir de zéro, et mon projet actuel est Minesweeper. En essayant de créer la fonction récursive qui révèle les espaces entourant un espace cliqué, je me suis heurté à la question de se terminer trop tôt pour apparemment pas de raison.Récursivité se terminant trop tôt dans la fonction Javascript

Vous pouvez lire tout le code (jusqu'à présent) ici: pastebin.com

ou consultez simplement la fonction autonome ci-dessous:

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]); 
    } 

} 

(et oui je sais que cette fonction ne devrait pas être déclenchée que si un bloc a zéro mines à côté, cela est tout simplement plus facile à des fins de test)

Répondre

2

Vous devez déclarer i comme une variable locale:

var i; 

en haut de la fonction le ferait. Comme c'est le cas, il est implicitement global, donc les appels récursifs gâchent la valeur de i dans les contextes parents.

+1

Merci beaucoup! Je suis en train de rire à quel point c'était stupide d'avoir commis une erreur et de ne pas avoir été détecté pendant si longtemps! –