Premiers pas en JavaScript
10.1 Fonction dans une fonction
cuy copyleft
  See You Why?  

 


test relatif à la fonction à valeur de retour (9.9) | | fonction - appel réciproque (10.2)

Contenu


JavaScript 1 - Introduction
JavaScript 2 - Commentaires et instructions
JavaScript 3 - Variables
JavaScript 4 - Types de variables
JavaScript 5 - Variables et chaines
JavaScript 6 - Les fonctions
JavaScript 7 - Les fonctions à paramètre unique
JavaScript 8 - Les fonctions à paramètres multiples
JavaScript 9 - L'instruction RETURN dans une fonction
JavaScript 10 - Appel d'une fonction dans une autre fonction
10.1 JS : Fonction qui appelle une autre fonction
10.2 JS : Première boucle involontaire
10.8 JS : un test sur les fonctions imbriquées
10.9 JS : un test sur les fonctions imbriquées
JavaScript 11 - Les variables locales ou globales
JavaScript 12 - Quelques opérateurs mathématiques
JavaScript 13 - ???
JavaScript 14 - L'instruction IF, pour les conditions
JavaScript 15 - L'instruction IF... ELSE..., pour les conditions à deux sorties
JavaScript 16 - Les IF imbriqués et fonction aléatoire
JavaScript 17 - Les conditions complexes
JavaScript 18 - L'instruction SWITCH, en cas de choix multiples
JavaScript 19 - La boucle FOR
JavaScript 20 - La boucle WHILE
JavaScript 21 - Les événements dans la programmation
JavaScript 22 - Quelques événements : onMouseOver onLoad etc.
JavaScript 23 - Les objets
JavaScript 24 - Créer ses propres objets
JavaScript 25 - Appliquer des méthodes à ses objets
JavaScript 26 - Les tableaux
JavaScript 27 - Différentes façons de créer des tableaux
JavaScript 28 - Propriétés et méthodes applicables aux tableaux
JavaScript 29 - Les méthodes applicables aux tableaux
JavaScript 30 - Méthodes de tris pour tableaux SORT, REVERSE et PUSH
JavaScript 31 - Ajouter des éléments à un tableau en utilisant une boucle
JavaScript 32 - Tecnique pour imprimer les éléments d'un tableau
JavaScript 33 - Lecture de bases de données
JavaScript 34 - Les objets mathématiques
JavaScript 35 - Les objets relatifs aux dates
JavaScript 36 - Les formulaires JS sont des objets
JavaScript 37 - Accès aux éléments d'un formulaire
JavaScript 38 - Validation des entrées d un formulaire
JavaScript 39 - Graphisme et JavaScript

JavaScript 50 - Calculateur d'emprunt
JavaScript 51 - Calendrier perpétuel et options diverses
JavaScript 99 - Documentation


 
 

 
Avec un peu de JavaScript,
n'oubliez pas de rendre vos pages
plus dynamiques et plus interactives.
 

 
 

 
Notre volonté est de rendre cette formation de JavaScript,
disponible le plus rapidement possible.
Le lecteur excusera l'imperfection de ce travail en cours de construction
et pourrait nous informer des défauts rencontrés.

  MERCI
 

 

 

I. Appel d'une Fonction dans une fonction

Désolé de contredire certains tutoriels de JS. Certains ne distinguent que 2 types de fonctions : celles sans paramètres et celles qui fournissent un résultat. Limiter les fonctions à ces 2 types est faux, puisque on trouve des fonctions
1. sans paramètres et sans résultat :
   envoyer un message fixe à l'internaute ;
2. avec paramètres et avec résultats :
   calculer l'hypothénuse d'un triangle dont on doit donner les 2 autres côtés comme paramètres ;
3. avec paramètres et sans résultat :
   envoyer un message personnalisé avec le prénom de l'internaute ;
4. sans paramètres mais avec résultat :
   cas le plus difficile à trouver, il ne faut pas de paramètres pour écrire la liste de tous les pays et
   retenir celui qui a été choisi par l'internaute visiteur,
   de même la fonction qui recherche l'adresse IP d'un internaute visiteur de vos pages.

Nous avons vu donc les fonctions sans paramètres et celles avec paramètres (unique ou multiples), celles avec une valeur de retour et celles qui engendrent des actions. Jusqu'ici, nous avons insisté sur la définition (ou déclaration) de la fonction et l'appel de cette même fonction.

Même si nous avons affirmé qu'il suffisait, pour appeler une fonction, de noter le nom de la fonction avec des parenthèses qui contiennent la valeur du ou des paramètres (parfois facultatifs), tous nos exemples montraient jusqu'ici l'appel d'une fonction par le script principal (parfois aussi appelé la racine) du programme.

Le lecteur aura compris la façon de définir ou déclarer une fonction personnelle ainsi que la façon de l'appeler dans le script principal, mais le lecteur attentif serait en droit de se poser la question : "Puis-je appeler une fonction dans une autre fonction ?". La réponse est simple OUI, mais ce chapitre a pour buts de vous montrer non seulement comment, mais aussi quels en sont les risques.

Comment ? De la même façon qu'un appel depuis la racine de votre script...

 

A. un exemple conseillé...

Un programme est une succession d'étapes dont chacune peut éventuellement être décomposée en actions plus élémentaires réalisables par l'ordinateur.
Il n'est pas rare que des concepteurs de programmes lancent au démarrage d'une page web une fonction initiale (qu'ils appellent init(), par exemple).
À partir de cette fonction initiale, ils appellent d'autres fonctions qu'ils détailleront par la suite.

Certains tutoriels parlent de sous-fonctions... cela n'existe pas en JS. Tout au plus, dans le cadre d'une conception objet, la fonction en question peut-elle effectivement être considérée comme une méthode mais privée.

Dans notre chapitre 6, section "appel d'une fonction", nous avons déjà
d'une part montré l'appel d'une fonction dans une autre fonction
et d'autre part, signalé la possibilité d'appeler une fonction dès l'ouverture d'une page HTML.
Revoyons ces deux appels dans notre exemple.

Dans le cas d'un site de vente au particulier, cette première fonction appelée à l'ouverture de la page HTML, init() pourrait par exemple se définir (se déclarer) ainsi :

function init() {
        creation_panier();
        coordonnees_client();
        details_prix_poids_frais();
        confirmation_commande();
        choix_methode_paiement();
}

et l'appel de cette fonction init() va se faire dès le chargement d'une page par la formulation de la balise <body> du document HTML. On lira alors :
<body onLoad="init()">

Évidemment, et comme nous l'avons déjà signalé plusieurs fois, la fonction init() doit avoir été déclarée avant la lecture de la balise <body>, c'est donc un cas où la fonction init() sera définie entre les balises <head> et </head>.

Un autre exemple pour expliquer cette procédure :

function premiere() {
        document.write("premiere etape<br>");
}
function seconde() {
        document.write("seconde etape<br>");
}

jusque là, ce n'est que la déclaration de deux fonctions ordinaires, sans paramètres et sans instruction RETURN, chacune écrivant un court message à l'écran, suivi d'un saut de ligne. Aucun appel de ces fonctions, donc rien ne se passera... Reste donc à déclarer une fonction qui va appeler ces deux fonctions ; appelons-la depart() :

function depart() {
        premiere();
        seconde();
}

voilà un pas de plus accompli, la fonction depart() va appeler les deux autres... magnifique, mais rien ne se passe... pourquoi ?
Tant que la fonction depart() n'est pas appelée, rien ne se passera, puisque c'est elle qui appellera chacune des deux autres fonctions...
il ne nous reste plus qu'à appeler la fonction depart() qui appellera la fonction premiere() puis la fonction seconde()... puis plus rien à faire, sauf à tester le code ci-dessous :

Exemple

<html>
<head><title>fonction dans fonction</title></head>
<body>
<script type="text/javascript">

function premiere() {
        document.write("premiere etape<br>");
}

function seconde() {
        document.write("seconde etape<br>");
}

function depart() {
        premiere()
;
        seconde();
}

depart();

 
</script>
</body>
</html>


Un bref rappel ici : les noms de fonctions ne peuvent pas comporter de lettres accentuées.

Le lecteur aura compris que l'instruction depart(), appel de cette fonction,
aurait aussi pu se faire au chargement de la page,
par un paramétrage de l'instruction <body> en <body onLoad="depart()">,
mais alors le code des fonctions aurait dû s'écrire plus haut entre les balises <head> et </head> du langage HTML.

B. un exemple risqué

La facilité avac laquelle une fonction peut en appeler une autre est telle que parfois on en arrive à ce que le serpent se morde la queue : les boucles involontaires sont fréquentes. J'appelle un 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 dans la section suivante de ce chapitre.

 

 

III. Appel réciproque

voir suite >>>

 

 

VIII. Exercices relatifs aux fonctions imbriquées

voir suite >>>

 

 

IX. Test relatif aux fonctions imbriquées

voir suite >>>

 

 


test relatif à la fonction à valeur de retour (9.9) | | fonction - appel réciproque (10.2)