Problème de variable dans fonction récursive

Résolu
glipper Messages postés 246 Date d'inscription dimanche 2 juin 2002 Statut Membre Dernière intervention 11 septembre 2016 - 2 févr. 2009 à 19:05
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 - 3 févr. 2009 à 18:23
Bonjour,
j'essai de faire une fonction recursive en javascript, qui parcourt tous les sous-noeuds contenus dans un noeud.

function clearBloc(node) {
if (node.hasChildNodes()) {
nChilds = node.childNodes.length;
for (i=0; i<nChilds; i++)
clearBloc(node.childNodes[i]);
}
}

Il me semble que ça devrait fonctionner. Pourtant, la valeur de la variable 'nChilds' change losque la fonction se rappelle elle-même. C'est assez étrange, puisque la variable nChilds est déclaré à l'interieur de la fonction, donc ce n'est pas une variable globale. Alors je ne comprend pas trop ce qui se passe.

J'ai fait des recherches sur la recursivité dans les scripts javascript, et apparament il ne devrait pas y avoir de problèmes j'ai l'impression. Quelqu'un aurait-il une idée du problème ?

Actuellement :
   entree_fonction (nChild vaut 20)
      ---> entree_fonction (nChild vaut 1)
               ---> entree fonction
               ---> sortie fonction
      ---> sortie fonction (nChild vaut 1)
   sortie fonction (nChild vaut 1 ??????)

4 réponses

Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
3 févr. 2009 à 06:54
j'aurais du répondre :
>>puisque la variable nChilds est déclaré à l'interieur de la fonction, donc ce n'est pas une variable globale
elle n'est pas déclarée justement : donc c'est variable globale
var permet de déclarer.
[mon Site][M'écrire]Bul
3
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
3 févr. 2009 à 05:02
bonjour,
>>la valeur de la variable 'nChilds' change losque la fonction se rappelle elle-même
ben... puisque tu la recalcules : nChilds = node.childNodes.length; ça me semble normal
Cordialement[mon Site][M'écrire]Bul
0
Bul3 Messages postés 4933 Date d'inscription samedi 1 juillet 2006 Statut Membre Dernière intervention 2 février 2015 14
3 févr. 2009 à 05:30
et peut-être
varnChilds = node.childNodes.length;
te conviendrait-il ? va savoir ?
[mon Site][M'écrire]Bul
0
PetoleTeam Messages postés 3426 Date d'inscription lundi 26 décembre 2005 Statut Membre Dernière intervention 14 janvier 2011 16
3 févr. 2009 à 18:23
Bonjour,
tout à fait vrai mon cher Bul3
on le le dira jamais assez de déclarer les
variables avec le mot clé var et de mettre un
; en fin d'instruction
Tiens juste pour
test
<html>

<head>
<script type= "text/javascript">
//-------------
function Test(){
  i = 0;

  for( ;i<10;i++);;;;
  alert("Test()\n i = " +i);
}
Test();

alert("Hors Fct\n i = " +i);
</script>
</head>



</html>

il suffit de
rajouter un var devant le i = 0; pour voir le résultat...
var i = 0;

;O)
0