ECMASCRIPT définit une fonction comme ceci : « member of the Object type that may be invoked as a subroutine » Les fonctions sont des « blocs de code » réutilisables qu’on peut appeler n’importe quand et de n’importe où dans un programme. Il existe des fonctions nommées qu’on peut appeler de n’importe où, et des fonctions anonymes qu’on peut exécuter (invoquer) juste à la fin de leur définition (expressions de fonctions immédiatement invoquées) ou utiliser comme event Handler ou qu’on peut affecter à une variable (soit la valeur qu’elle retourne, soit son adresse = pointeur). Le petit script ci-dessous illustre différents types et syntaxes de fonctions.
ECMASCRIPTdéfinit une fonction comme ceci : «member of theObject typethat may be invoked as asub-routine»
Lesfonctionssont des « blocs de code » réutilisables qu on peut appeler n importe quand et de n importe où dans ✥ ✥ ✥ un programme.
Il existe desfonctions nomméesqu on peut appeler de ✥ n importe où, et desfonctions anonymesqu on peut exé-✥ ✥ cuter (invoquer) juste à la fin de leur définition (expressions de fonctions immédiatement invoquées) ou utiliser commeevent Handlerou qu on peut affecter à une variable ✥ (soit la valeur qu elle retourne, soit son adresse = pointeur). ✥
Le petit script ci-dessous illustre différents types et syntaxes de fonctions.
<script type="text/javascript"> "use strict;" // Syntaxe ordinaire d'une fonction
Petite Introduction Aux Fonctions JavaScript function f0(v=1){console.log(Math.tan(v))}; f0(); // 1.5574077246549023
/******************************/
let f1=(function(){return Math.tan(1)})(); // // f1 reçoit ici la VALEUR DE RETOUR de la // fonction anonyme, car cette fonction anonyme // est immédiatement exécutée (invoquée) à ause des // parenthèses qui termient sa définition/déclaration. // Mais ici les parenthèses entourant la // définition/déclaration de la fonction anonyme // ne sont pas indispensables car affectation.
console.log(f1); // 1.5574077246549023
// console.log(f1()); // // TypeError: f1 is not a function
// f1(); // TypeError:
f1 is not a function
/******************************/
let f2=function(){return Math.tan(v)}(v=1); // // f2 reçoit ici la valeur de retour de // la fonction anonyme.
console.log(f2); // 1.5574077246549023
/******************************/
mardi 31 juillet 2018
- 2/12 -
23:12:45 [PM]
Petite Introduction Aux Fonctions JavaScript
let f3=function(v=1){return Math.tan(v)}; console.log(f3()); // 1.5574077246549023
let f4=function(v=123){console.log(Math.tan(v))}; f4(Math.log(Math.E)); // 1.5574077246549023
/*****************************/
// function(){console.log(Math.tan(1)}(); // // Ici les parenthèses autour de la fonction // sont obligatoires. // SyntaxError: function statement requires a name
// Mais on peut immédiatement invoquer la fonction // anonyme en la faisant précéder d'un opérateur, // ou bien entendu, l'entourer de parenthèses.
(function(){console.log(Math.tan(1))}()); // 1.5574077246549023 // // Ici les parenthèses autour de la fonction // sont obligatoires. // SyntaxError: function statement requires a name
(function(){console.log(Math.tan(1))})(); // 1.5574077246549023 // // Ici les parenthèses autour de la fonction // sont obligatoires. // SyntaxError: function statement requires a name
/*****************************/
let f5=function(){console.log(Math.tan(1))}; // // Ici, il s'agit aussi d'une fonction anonyme // On ne peut pas l'appeler par son nom. // Mais la vaviable f3 reçoit (pointe) L'ADRESSE // de la fonction anonyme qui n'est pas // immédiatement invoquée. // On peut donc appeler la fonction anonyme // indirectement via son adresse stockée dans // la variable f3
f5(); // 1.5574077246549023
let f6=_=>console.log(Math.tan(1));
mardi 31 juillet 2018
- 4/12 -
23:12:45 [PM]
f6()
Petite Introduction Aux Fonctions JavaScript
/*****************************/
// LE PARAMÈTRE DU RESTE
let f7=function(p1,p2,...p3){ console.log(p1,p2,p3);
Rappel:le caractère ` est le code ASCII 096, obtensible avec <ALT-096>.
mardi 31 juillet 2018
- 6/12 -
23:12:45 [PM]
Petite Introduction Aux Fonctions JavaScript
Redéfinition de fonction:
En JavaScript aussi bien en mode standard qu'en mode strict, une fonction peut être redéfinie, pouvant engendrer de graves erreurs de temps d'exécution (omis-sions d'exécution) pouvant passer inaperçues, avec les contraintes suivantes:
2. On pourrait croire que la dernière fonction redéfinie devrait prendre effet à l'endroit de la redéfinition jusqu'à la fin de l'exécution du programme ou une nouvelle redéfinition, écrasant ou se substituant à toute définition antérieure. Mais méfiez-vous parfois des apparences !
<script language="JavaScript"> "use strict"; function factor(n){ console.dir("Ceci ne calcule pas la factorielle") }
function factor(n){ if(n==1)return 1 else return n*factor(n-1) }
3. Une définition de fonction reste active tant qu'une autre fonction portant le même nom n'a pas encore été redéfinie dans le code source DANS UN AUTRE BLOC DE SCRIPT.
<script language="JavaScript"> "use strict"; function factor(n){ console.dir("Ceci ne calcule pas la factorielle") }
factor(6) // Ceci ne calcule pas la factorielle </script>
<script> console.log("REDÉFINITION DANS UN AUTRE BLOC DE SCRIPT") </script>
Ceci ne calcule pas la factorielle mardi 31 juillet 2018- 8/12 -
test.html:3:1 23:12:45 [PM]
Petite Introduction Aux Fonctions JavaScript REDÉFINITION DANS UN AUTRE BLOC DE SCRIPT test.html:11:1 51090942171709440000 test.html:20:1
4. Si la redéfinition de fonction se fait dans UN MÊME BLOC DE SCRIPT c'est la dernière définition de la fonction ayant le même nom qui sera active (qui exé-cutera) et avant cette dernière redéfinition la première définition ne sera même pas appelée.
<script language="JavaScript"> "use strict"; function factor(n){ console.dir("Ceci ne calcule pas la factorielle") }
factor(6) // N'appelle même pas ! // Notez aussi que toutes les [re]définitions sont // dans un même élément SCRIPT.
console.log("REDÉFINITION DANS UN AUTRE BLOC DE SCRIPT")
function factor(n){ if(n==1)return 1 else return n*factor(n-1) }
Mots-clés: fonctions,curry,currying,redéfinition,fonction fermeture,closure,paramètre du reste,blocs de code,réutilisables,fonctions nommées,fonctions anony-mes,expressions de fonctions immédiatement invoquées,eventHand-ler,affecter,variable,pointeur,script,types de fonction,syntaxes de fonction.
Mercredi, 11. avril 2018 (23:34 [pm]). Dernière mise à jour : 31 juillet 2018 (23:02 [pm]).
DIASOLUKA Nz. Luyalu Docteur en Médecine, Chirurgie & Accouchements (1977), CNOM : 0866 - Spécialiste en ophtalmologie (1980) Informaticien-amateur, Programmeur et WebMaster.
Chercheur indépendant, autonome et autofinancé, bénévole,
sans aucun conflit ou lien d intérêt 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é.