fonctions imbriquees en JS - javascript tome vi

J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga
JAVASC RI PT
(Programmation Internet)
VOL. VI
+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
La dernière révision de ce texte est disponible sur CD.
CHAPITRE 12 :
L e s f o n c t i o n s i m b r i q u é e s e n j a v a s c r i p t
Contrairement aux langages C, en JavaScript les fonctions
peuvent être imbriquées . Ceci parce qu’en JavaScript les
fonctions sont des «
objets de premier ordre
« on dit
aussi «
objets de première classe
« car elles peuvent
être manipulées, échangées, avoir des
propriétés
et des
méthodes
, comme tout autre objet JS. Une fonction JS, or-
dinaire soit-elle, est donc ni plus ni moins un
objet
Function
(callable object). Or justement les méthodes sont
ni plus ni moins des fonctions.
Mais une fonction imbriquée ne peut en principe être appe-
lée que du sein de la fonction qui l’englobe.
<script language="JavaScript"> "use strict";
function personne(){
function recommendation(){
console.log( "Hello");
}
}
console.log(personne());
// undefined
//console.log(recommandation());
// Uncaught ReferenceError:
// recommandation is not defined
console.log(personne.recommandation());
// Uncaught TypeError:
// personne.recommandation is not a function
J.D.B. DIASOLUKA Nz.
Luyalu
JavaScript Tome-VI
Fonctions
Imbriquées - 2 / 15 - mardi, 2. octobre 2018 (12:02 )
</script>
Les membres d’une fonction ont une portée/visibilité lo-
cale (limitée au bloc de cette fonction) : pas accessibles
du dehors de la fonction.
Vous pouvez normalement vous arranger pour éventuellement
appeler la fonction imbriquée seulement du sein-même de la
fonction englobante. Vous l’exécutez bien s«r, mais pas
du dehors de la fonction englobante
.
<script language="JavaScript"> "use strict";
function personne(dn,gender){
let age=(new Date()).getFullYear() - dn
function recommendation(sx){
if(!sx) sx="";
if(age>50){
const msg="Attention! Âge "+age+" > 50 ans!
Veillez Â";
if(sx.toLowerCase().startsWith("m") ||
sx.toLowerCase().startsWith("h")) {
con-
sole.log(msg,"l'andropause".toUpperCase())
}
else if(sx.startsWith("F")) {
console.log(msg,"lano-
pause".toUpperCase())
}
else {
console.log("Sexe Vide.".toUpperCase())
}
}
}
/////////////////////////////////
recommendation(gender);
/////////////////////////////////
}
J.D.B. DIASOLUKA Nz.
Luyalu
JavaScript Tome-VI
Fonctions
Imbriquées - 3 / 15 - mardi, 2. octobre 2018 (12:02 )
personne(1953,"");
// SEXE VIDE.
</script>
Une fa«on de contourner cette restriction est de créer au
sein de la fonction englobante un membre (propriété) por-
tant le même nom que la fonction englobante, cette pro-
priété servira de « clé « pour accéder à la fonction
imbriquée, sans le mot-clé var.ni le mot-clé this.
<script language="JavaScript"> "use strict";
function personne(dn){
let age=(new Date()).getFullYear() - dn
function recommandation(sx){
if(!sx) sx="";
if(age>50){
const msg="Attention! Âge "+age+" > 50 ans!
Veillez Â";
if(sx.toLowerCase().startsWith("m") ||
sx.toLowerCase().startsWith("h")) {
con-
sole.log(msg,"l'andropause".toUpperCase())
}
else if(sx.startsWith("F")) {
console.log(msg,"lano-
pause".toUpperCase())
}
else {
console.log("Sexe Vide.".toUpperCase())
}
}
}
/////////////////////////////////
personne.rec = recommandation;
/////////////////////////////////
}
personne(1953);
J.D.B. DIASOLUKA Nz.
Luyalu
JavaScript Tome-VI
Fonctions
Imbriquées - 4 / 15 - mardi, 2. octobre 2018 (12:02 )
personne.rec("Homme");
// Attention! Âge [65] > 50 ans! Veillez  L'ANDRO-
PAUSE
</script>
Une autre fa«on d’appeler la fonction imbriquée du de-
hors de la fonction englobante est de
faire de la fonction
imbriquée une méthode
de la fonction englobante, avec le
mot-clé this. Ensuite créer une instance de la fonction
englobante, et appeler la fonction imbriquée comme méthode
de l’instance.
<script language="JavaScript"> "use strict";
function personne(dn){
let age=(new Date()).getFullYear() - dn
// age === var locale, pas propriÂ
/*
// Vous pouvez accÂder  une propri en dehors du
constructeur, du sein de ses instances.
// Mais vous ne pouvez accÂder  une variable locale
que du sein de la fonction (ici le constructeur).
*/
this.recommandation = function(sx){
if(!sx) sx="";
if(age>50){
const msg="Attention! Âge "+age+" > 50 ans!
Veillez Â";
if(sx.toLowerCase().startsWith("m") ||
sx.toLowerCase().startsWith("h")) {
con-
sole.log(msg,"l'andropause".toUpperCase())
}
else if(sx.startsWith("F")) {
console.log(msg,"lano-
pause".toUpperCase())
}
else {
console.log("Sexe Vide.".toUpperCase())
J.D.B. DIASOLUKA Nz.
Luyalu
JavaScript Tome-VI
Fonctions
Imbriquées - 5 / 15 - mardi, 2. octobre 2018 (12:02 )
}
}
}
}
const inst = new personne(1953);
inst.recommandation("Femme");
// Attention! Âge 65 > 50 ans! Veillez  LA MÂNO-
PAUSE
</script>
Au besoin, vous pouvez utiliser la technique de curry
function, on parle alors de fermeture (= closure):
<script language="JavaScript"> "use strict";
function personne(dn,gender){
let age=(new Date()).getFullYear() - dn
function recommendation(sx){
if(!sx) sx="";
if(age>50){
const msg="Attention! Âge "+age+" > 50 ans!
Veillez Â";
if(sx.toLowerCase().startsWith("m") ||
sx.toLowerCase().startsWith("h")) {
con-
sole.log(msg,"l'andropause".toUpperCase())
}
else if(sx.startsWith("F")) {
console.log(msg,"lano-
pause".toUpperCase())
}
else {
console.log("Sexe Vide.".toUpperCase())
}
}
}
/////////////////////////////////
return recommendation;
1 / 15 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !