Problème de variable dans fonction récursive [Résolu]

Signaler
Messages postés
246
Date d'inscription
dimanche 2 juin 2002
Statut
Membre
Dernière intervention
11 septembre 2016
-
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
-
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

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
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
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
8
et peut-être
varnChilds = node.childNodes.length;
te conviendrait-il ? va savoir ?
[mon Site][M'écrire]Bul
Messages postés
3426
Date d'inscription
lundi 26 décembre 2005
Statut
Membre
Dernière intervention
14 janvier 2011
13
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)