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 ()