10.2 Fonction appel réciproque |
See You Why? |
Avec un peu de JavaScript, n'oubliez pas de rendre vos pages plus dynamiques et plus interactives. |
MERCI |
Dans la section précédente, nous avons signalé la facilité avac laquelle une fonction peut en appeler une autre et le risque que le serpent se morde la queue : les boucles involontaires sont fréquentes. J'appelle une fonction, qui en appelle une autre, qui elle-même en appelle une troisième... mais si cette troisième appelle la première, la boucle est bouclée... et tant que nous n'aurons pas étudié les conditions ou les boucles volontaires... gare aux ronds-points dans lesquels on peut entrer sans pouvoir en sortir...
Illustrons ce propos par un exemple plus simple.
Deux fonctions suffisent... pourquoi pas celles que nous venons d'utiliser.
La fonction premiere()
peut comporter un appel de la fonction seconde()
et
la fonction seconde()
peut comporter un appel de la fonction premiere()
.
Attention encore, ici deux déclarations de fonctions, mais aucun appel dans la racine de votre code. Il ne vous reste qu'à appeler l'une des 2 fonctions qui appellera l'autre, qui appellera la précédente, qui appellera... (j'arrête, sinon je remplirai facilement la page ;o) je vous laisse cependant le soin d'essayer puis d'éditer le code ci-dessous et d'ajouter un appel à l'une des fonctions premiere()
ou seconde()
dans la racine de votre code [pour vous aider, je l'ai noté en commentaires, il suffit d'enlever le double slash] :
Patience... selon votre ordinateur, sa vitesse de travail, sa mémoire vive (RAM) et sa mémoire virtuelle (dépendant de la place libre sur votre disque dur), vous pourriez attendre quelques minutes à plusieurs heures sans rien voir s'afficher :-((
Éditez la source comme indiqué et là, au moins, vous le verrez travailler :-))
jusqu'au moment où il abandonnera...
Exemple
|
Après cette modification, vous pensez que votre ordinateur est entré dans une boucle sans fin... heureusement la technique prévient ce genre d'erreur et votre ordi s'arrêtera... après combien de boucles parcourues ? Cela dépendra de votre équipement et de sa configuration.
Si vous voulez le savoir, je vous propose les quelques modifications suivantes :
1.- dans la racine, avant l'appel de la fonction, insérer un compteur
(sans oublier le ; de fin d'instruction)
var i=0;
2.- dans la fonction premiere()
, incrémenter ce compteur en écrivant
i++;
avant l'appel de la fonction seconde()
, (sans oublier le ; de fin d'instruction) ;
3.- dans la fonction seconde()
, écrire la valeur de i, en notant
document.write(i);
avant l'appel de la fonction premiere()
(aussi sans oublier le ; de fin d'instruction).
[ici aussi, pour vous aider, je l'ai noté en commentaires, il suffit d'enlever 3 fois un double slash]
Si vous avez suivi scrupuleusement les instructions données ci-dessus, et que vous exécutez le programme, vous venez de découvrir à quelle vitesse travaille un ordinateur (malgré que le JS soit interprété et non compilé, donc lent), mais de plus :
Prêt pour la suite du cours ? Vous venez de découvrir comment créer et appeler les fonctions, qu'elles soient à paramètres multiples ou unique, avec instruction RETURN ou sans, voire qu'elles s'appellent l'une l'autre (avec les risques de boucles involontaires).
Comme promis, notre prochain chapitre traitera des variables globales et locales que vous venez de découvrir dans ce chapitre.
voir suite >>>
voir suite >>>
voir suite >>>