fanon

Transcription

fanon
FONCTION ANONYME
Pour Débutant
J A V A S C R I P T (Programmation Internet) V O L . I I I
J.B. Dadet DIASOLUKA Luyalu Nzoyifuanga
+243 - 851278216 - 899508675 - 995624714 - 902263541 - 813572818
La dernière révision de ce texte est disponible sur CD.
FONCTION ANONYME EN JAVASCRIPT
Regardez bien ce code JavaScript :
(Ne reprenez pas les numéros de lignes dans votre éditeur
de programme).
1 <script type="text/JavaScript">
2 <!-3 (function (){
4
v=Math.round(Math.random()*2016)
5
g()
6 })();
7
8 function g(){
9
alert(v)
10 }
11 //-->
12 </script>
Pour le rendre un peu plus clair, nous supprimons les tags
de commentaires (lignes 2 et 11).
1 <script type="text/JavaScript">
3 (function (){
4
v=Math.round(Math.random()*2016)
5
g()
6 })();
7
8 function g(){
9
alert(v)
10 }
FONCTION ANONYME
JavaScript
12 </script>
Regardez bien ce code dans un éditeur de programme qui
met en surbrillance les parenthèses appariées :
3
4
5
6
(function (){
v=Math.round(Math.random()*2016)
g()
})();
La première parenthèse (ouvrante, à la ligne 3) délimite le
début de l’ensemble du code qui doit être exécuté par le
couple des deux dernières parenthèses de la ligne 6.
(
Elle ouvre à la ligne « 3 (function (){ » et
va jusque juste après l'accolade à la ligne 6 comme ceci « 6
}) »
dans « 6 }) (); »
)
Cette parenthèse délimite un bloc dont la nature est
spécifiée par le mot-clé FUNCTION en minuscules.
La deuxième parenthèse à la ligne 6 indique comment traiter
le code qui le précède. La paire de parenthèses indique que
ce code doit être traitée en tant que suite d'instructions ou
code exécutable ou fonction, tel que d'ailleurs stipulé au
début du bloc précédent, et sert à recevoir les arguments de
la fonction (Dans la définition d’une fonction normale, les
paramètres de la fonction se logent dans la parenthèse qui
suit l’ID obligatoire de la fonction).
Notez que dans ce bloc précédent de fonction (lignes 4 à 6)
on n'a pas spécifié un nom identificateur pour la fonction.
On parle de FONCTION ANONYME.
Le point-virgule qui clôture la ligne 6 du programme termine
la définition de la fonction anonyme. Ce point-virgule est
obligatoire (mandatory en anglais), non facultatif. Dans la
DIASOLUKA Nz. Luyalu
-2/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
famille des langages C, le point-virgule est obligatoire pour
terminer toute instruction (la virgule sert quant à elle à
chaîner des instructions, c'est-à-dire des instructions
"solidaires" c'est-à-dire des instructions qui peuvent et
doivent se suivre à la place d'une seule attendue).
En JavaScript il n'est pas obligatoire de terminer avec un
point-virgule les instructions qui sont en fin de ligne, sauf
par exemple à la fin de la définition d'une fonction anonyme,
mais aussi à la fin de l'instruction qui précède la définition
de cette fonction anonyme.
Par exemple, lignes 4 à 6 :
1
2
3
4
5
6
7
8
9
10
11
<script type="text/JavaScript">
var taille=172,pds=86,j=11,a=1953,m=8;
(function (){
g(a,j,m)
})(j,m,a);
function g(q,r,s){
alert(r+"/"+s+"/"+q)
}
</script>
Notez qu'un point-virgule a dû séparer la
déclaration/initialisation de variables à la ligne 2, et la
définition de la fonction anonyme (lignes 4 à 6). Si c'était
une fonction ordinaire le point-virgule n'aurait pas été
nécessaire, ni pour terminer l'instruction précédente, ni pour
terminer la définition de la fonction anonyme.
1 <script type="text/JavaScript">
2
var taille=172,pds=86,j=11,a=1953,m=8
3
4
function f(b,c,a){
5
g(a,b,c)
6
}
7
8
function g(q,r,s){
9 alert(r+"/"+s+"/"+q)
DIASOLUKA Nz. Luyalu
-3/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
10 }
11
12 f(j,m,a)
13 </script>
Une fonction anonyme est une fonction qui n'a pas besoin
d'être identifiée ou baptisée, mais vous pouvez lui coller à
volonté une identité [unique comme d’habitude] pour vous
retrouver lors des débogages.
On peut aussi l'appeler fonction inline (mais pas
exactement dans le même sens qu’en POO), c'est-à-dire
qu'elle s'exécute au moment où elle est lue, sans besoin
d'être explicitement appelée, et ses variables privées (ou
locales, spécifiées par le mot-clé « var ») sont libérées =
détruites quand le point-virgule final est rencontré,
redisponibilisant la mémoire RAM.
Ces variables locales déclarées dans le scope du mot-clé var
ne seront donc pas accessibles ou disponibles en dehors de
la fonction inline ou anonyme.
1 <script type="text/JavaScript">
2
3 (function (){
4
taille=172, pds=86, j=11, a=1953, m=8;
5
g()
6
})();
7
8
function g(){
9
alert(j+"/"+m+"/"+a)
10 }
11 </script>
Affiche :
11/8/1953
Tandis que la suivante n'affiche pas :
1
<script type="text/JavaScript">
DIASOLUKA Nz. Luyalu
-4/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
2
3
(function (){
4
var taille=172,pds=86,j=11,a=1953,m=8;
5
g()
6
})();
7
8
function g(){
9
document.write(j+"/"+m+"/"+a)
10 }
11 </script>
Mais émet le message d'erreur suivant :
Ligne 9, caractère 3 : « j » est indéfini.
ou
Uncaught exception: ReferenceError: Undefined variable: j
Error thrown at line 9, column 2 in g() in
file://localhost/E:/DADET/A%20PUBLIER/anon.html:
document.write(j+"/"+m+"/"+a)
called from line 5, column 2 in <anonymous function>() in
file://localhost/E:/DADET/A%20PUBLIER/anon.html:
g()
called from line 3, column 0 in
file://localhost/E:/DADET/A%20PUBLIER/anon.html:
(function (){
Regardez maintenant le code qui suit. C’est aussi une
fonction anonyme mais qui exige un identificateur. Mais cet
identificateur n’identifie pas la fonction, mais reçoit la valeur
que cette dernière retourne, à cause des parenthèses
terminales qui fait exécuter la fonction sur le champ
(« fonction à exécution immédiate »), donc susceptible
de retourner une valeur :
<script type="text/javascript"> "use strict";
const r = function(){
console.log("inFct");
return "returned";
}(); // 
Console.log(r);
r(); // Uncaught TypeError: r is not a function
// at test.html:7
</script>
DIASOLUKA Nz. Luyalu
-5/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
Si on supprime le couple de parenthèses terminales, la
fonction anonyme ne sera tout bonnement plus exécutée
immédiatement. De plus, la variable « r » (membre de
gauche de l’affectation) ne recevra plus non plus la valeur
retournée par la fonction, mais plutôt l’adresse-mémoire [du
contenu] du bloc de la fonction.
Sans l’affectation de l’adresse-mémoire du corps de la
fonction à la variable « r », notre fonction anonyme sera
inexécutable !
<script type="text/javascript"> "use strict";
const r = function(){
console.log("inFct");
return "returned";
};
console.log(r);
// Affiche le contenu de l’adresse pointée par “r”.
r();
// Exécution du contenu en tant que fonction = Appel de fonction.
</script>
Remarquez que la valeur « returned » retournée par la
fonction a été ignorée.
Exécution avec Yandex Version 19.1.1.909.
Exécution avec Firefox 65.0.1.
DIASOLUKA Nz. Luyalu
-6/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
Avec
console.dir(r);
au lieu de
console.log(r);
L’exécution dans Yandex est comme suit :
Idem pour
<script type="text/javascript"> "use strict";
const r = _ => {
console.log("inFct");
return "returned";
};
console.dir(r);
r();
</script>
DIASOLUKA Nz. Luyalu
-7/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
VARIABLES STATIQUES EN JAVASCRIPT :
Une difficulté parmi d'autres en JavaScript pour ceux qui
migrent de la famille des langages C :
Il n'existe pas en JavaScript de type de variable « static »,
c'est-à-dire qui garde sa valeur exitoire même quand on
quitte la fonction, et la conserve jusqu'à la prochaine fois
que la fonction est entrée. Il y a bien sûr des astuces pour
simuler ce type en JavaScript (le plus simple c’est d’utiliser
une variable globale qui est utilisée uniquement dans cette
fonction seule), mais voici comment ça se passe en langage
C (notez qu’en langage C toutes les instructions et
commandes sauf par exemple les commentaires et les
accolades fermantes se terminent par un « ; ») :
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
// Borland C++ - (C) Copyright 1991 by Borland International
/* staticvariable.c */
#include <stdio.h>
int main() {
int k;
for(k=0;k<15;k++){
sfct();
}
printf("%s","\n\n");
return 0;
}
int sfct(){
static svar=8;
// Essayez différentes valeurs pour svar
printf("%d, ",svar++);
return 0;
}
Et voici commet il exécute si on initialise la variable
statique svar à svar=8 ;
8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
DIASOLUKA Nz. Luyalu
-8/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
Vous voici donc maintenant ?expert¿ en fonctions
anonymes de JavaScript, et en même temps aussi vous
connaissez maintenant les variables statiques des
langages C.
Bonnes applications.
Kinshasa, le jeudi 4 avril 2019 - 10:46:33 PM
Mots-clés :
ECMASCRIPT, JAVASCRIPT, Programmation Internet, fonction anonyme, valeur de retour,
obligatoire, définition, inline, fonction inline, ReferenceError, static, valeur exitoire, variables
statiques
http://www.amessi.org/diasoluka
https://www.youtube.com/results?search_query=diasoluka
http://diasoluyalu.exactpages.com
c/° OPTIQUE PROFESSIONNELLE (OPTIPRO)
7, Av du Port (entre Gde Poste et Av. Mongala)
en Face de Lignes Aériennes du Congo (LAC)
Tél.: +243 902263541
[email protected]
Amitiés.
DIASOLUKA Nz. Luyalu
-9/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
DIASOLUKA Nz. Luyalu
Docteur en Médecine, Chirurgie & Accouchements (1977),
CNOM : 0866 - Spécialiste en ophtalmologie (1980)
Études humanités : Scientifique - Mathématiques & Physique.
Informaticien-amateur, Programmeur et WebMaster.
Chercheur indépendant, autonome et autofinancé, bénévole, sans aucun
conflit d’intérêt ou liens d'intérêts ou contrainte promotionnelle avec
qui qu’il soit ou quelqu’organisme ou institution / organisation que ce
soit, étatique, paraétatique ou privé, industriel ou commercial en
relation avec le sujet présenté.
+243 - 851278216 - 899508675 - 991239212 - 902263541 - 813572818
[email protected]
Autre Lecture :
https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-La-Creation
D’autres publications pouvant aussi intéresser :
• https://www.scribd.com/document/377036251/Le-Dosage-Des-Medicaments-en-Cac-Cas
• https://www.scribd.com/document/377035454/Le-Hasard-Des-Thermometres-Non-contacta-Infrarouge
• https://www.scribd.com/document/376222482/Petite-Introduction-Aux-FonctionsJavaScript
• https://www.scribd.com/document/376221919/La-Foi-en-Jesus-Christ-Pour-Quoi-Faire
• https://www.scribd.com/document/375689778/Lacuite-visuelle-angulaire
• https://www.scribd.com/document/375349851/La-variable-This
• https://www.scribd.com/document/375024162/Fonctions-Imbriquees-en-JS
• https://www.scribd.com/document/374789297/Format-Interne-Des-Objets-JavaScript
• https://www.scribd.com/document/374788758/Iterations-en-JavaScript
• https://www.scribd.com/document/374738470/Le-Plus-Grand-Secret-de-La-Creation
• https://www.scribd.com/document/374597969/Nouvelle-Formule-d-IMC-indice-dedoduite-Selon-Dr-Diasoluka
• https://www.scribd.com/document/373847209/Property-Descriptors
• https://www.scribd.com/document/373833282/l-Objet-Global-Window
• https://www.scribd.com/document/372665249/Javascript-Tome-II
• https://www.scribd.com/document/355291488/motilite-oculaire-2
DIASOLUKA Nz. Luyalu
-10/11-
jeudi 4 avril 2019 ()
FONCTION ANONYME
JavaScript
• https://www.scribd.com/document/355291239/motilite-oculaire-I
• https://www.scribd.com/document/355290248/Script-d-Analyses-Des-ReflexesPupillomoteurs
• https://www.scribd.com/document/321168468/Renseignements-Id-et-Anthropometriques
• https://www.scribd.com/document/320856721/Emission-31-Jul-2016
• https://www.scribd.com/document/318182982/Complication-Visuelle-du-Traitement-de-LaMalaria
• https://www.scribd.com/document/318180637/Rapport-Entre-Oxymetrie-Et-TypeRespiration
• https://www.scribd.com/document/315746265/Classification-Des-Medicaments
• https://www.scribd.com/document/315745909/Incongruences-Heresies-et-Heterodoxiesde-la-Notion-de-Laboratoire
• https://www.scribd.com/document/315745725/Rapport-Entre-Oxymetrie-Et-TypeRespiration
DIASOLUKA Nz. Luyalu
-11/11-
jeudi 4 avril 2019 ()