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

 

 

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)

 

 

Merci de votre visite à partir de :

Vous êtes sur :
https://cuy.be/cours/jvs/jvs_100_fonction_ds_fonction.html

partager sur FaceBook...           consulter sur FaceBook...

 

copyleft
Des liens ne fonctionnent plus ?
Avez-vous des suggestions ?
des commentaires, des corrections, un encouragement... ?
Pour info : Non, il n'y a pas de version papier ou DOC, PDF, etc. de ces notes.


Envoyez-moi un E-Mail (cuy(point)w(at)skynet(point)be)

Attention (at) signifie @ et (point) signifie .

Accueil CUY = See you why?

Compteur gratuitEasyCounter     BelStat Monitored by BelStat - Your Site Counts
La 1 000 000e page a été visitée le 21 mai 2010.
La 2 000 000e page a été visitée ce 18 mars 2012, vers midi.
La 3 000 000e page a été visitée ce 7 janvier 2014 entre 18 h et 18 h 45,
La 4 000 000e page a été visitée ce 5 juin 2015 entre 15 h 49 et 15 h 52,
La 5 000 000e page a été visitée ce 29 aout 2017 après 23 h 30,
Et la 6 000 000e page visitée, trop tôt pour y penser ?
 
et, d'après BelStat, CUY est visité surtout en semaine, peu le weekend...
moins et irrégulièrement pendant les vacances :

visites sur 3 mois, de la mi octobre 2013 à la mi janvier 2014.
 
La 3 333 333e page visitée a eu lieu ce mardi 10 juin 2014, en début d'après midi...
La 3 666 666e page visitée a eu lieu ce dimanche 28 decembre 2014, vers 16 h...
Un tiers de million de pages visitées en 154 jours cela fait une moyenne de 2165 pages visitées par jour...
Deux tiers de million de pages visitées en 355 jours soit une moyenne de 1878 pages visitées par jour...
et seulement 1195 pages visitées quotidiennement pendant les vacances estivales
de la mi juin à la mi septembre 2014

Vous voulez lire quelques messages reçus ?
quelques encouragements ?
Cliquez ici


Fin septembre 2009, installation de ce compteur
qui ne compte chaque nouvel ordinateur visiteur qu'une seule fois
free counter
 
m-à-j du 22/11/2021 :

Depuis cette fin septembre 2009, parmi les 210 pays (sur 274 drapeaux connus) qui nous ont visité,
voici les 100 pays qui nous visitent le plus, 
Nos petits visiteurs, classés par date de visite, où un seul ordi nous a visité, sont :
199. Turkmenistan (TM May 10, 2017) ; 200. Lesotho (LS March 1, 2017) ;
201. Turks and Caicos Island (TC January 18, 2016
202. Cook Islands (CK September 19, 2015)  203. Faroe Islands (FO January 27, 2015
204. Virgin Islands American (VI November 12, 2014) ;
205. Belize (BZ September 29, 2014) ;206. Eswatini - Swaziland (SZ July 21, 2014) ;
207. Grenada (GD April 3, 2014) ; 208. Timor-Leste (TI March 29, 2014) ;
209. American Samoa (AS December 26, 2012) ; 210. Guyana (GY November 5, 2010).