À propos de ce cours
Chapitre 10 — Les fonctions en JavaScript · Expressions de fonction et fonctions fléchées
• écrire une fonction sous forme de déclaration, d'expression ou de fonction fléchée ;
• maîtriser les variantes d'écriture des fonctions fléchées ;
• comprendre la différence de remontée (hoisting) entre ces écritures ;
• savoir quand une fonction fléchée ne convient pas (
this).1. Trois écritures

Figure 1 — Trois écritures, trois comportements légèrement différents.
// 1. Trois façons d'écrire la même fonction
function carre1(x) { return x * x; } // déclaration
const carre2 = function (x) { return x * x; }; // expression
const carre3 = (x) => x * x; // fonction fléchée
console.log(carre1(6), carre2(6), carre3(6));
// 2. Les variantes d'écriture d'une fonction fléchée
const direBonjour = () => "Bonjour"; // aucun paramètre
const doubler = n => n * 2; // un paramètre : parenthèses facultatives
const somme = (a, b) => a + b; // plusieurs paramètres
const fiche = (nom, note) => ({ nom, note }); // renvoyer un objet : parenthèses autour
const mention = (note) => { // plusieurs instructions : accolades + return
if (note >= 14) return "Bien";
return note >= 10 ? "Passable" : "Insuffisant";
};
console.log(direBonjour(), doubler(8), somme(2, 3), fiche("Amina", 15), mention(12));
// 3. Remontée (hoisting) : seule la déclaration peut être appelée avant d'être écrite
console.log("déclaration avant sa définition :", tripler(3));
function tripler(x) { return x * 3; }
try { quadrupler(3); } catch (e) { console.log("expression avant sa définition →", e.name); }
const quadrupler = (x) => x * 4;
// 4. Les fléchées sont parfaites comme callbacks
const notes = [12, 7, 16, 10];
console.log("admis :", notes.filter((n) => n >= 10), "| sur 100 :", notes.map((n) => n * 5));
// 5. Différence avec this : une fléchée n'a pas son propre this
const stagiaire = {
nom: "Karim",
notes: [14, 16],
presenterClassique: function () { return `Je suis ${this.nom}`; },
presenterFlechee: () => `Je suis ${typeof this === "object" && this !== null && this.nom ? this.nom : "?? (pas de this propre)"}`,
afficherNotes: function () {
return this.notes.map((n) => `${this.nom} : ${n}`); // la fléchée garde le this de afficherNotes
},
};
console.log(stagiaire.presenterClassique(), "|", stagiaire.presenterFlechee());
console.log(stagiaire.afficherNotes());
Résultat dans la console
36 36 36
Bonjour 16 5 { nom: 'Amina', note: 15 } Passable
déclaration avant sa définition : 9
expression avant sa définition → ReferenceError
admis : [ 12, 16, 10 ] | sur 100 : [ 60, 35, 80, 50 ]
Je suis Karim | Je suis ?? (pas de this propre)
[ 'Karim : 14', 'Karim : 16' ]
2. Les fonctions fléchées en détail
- On remplace
functionpar une flèche=>(le signe égal suivi du signe « supérieur à ») placée après les paramètres. - Un seul paramètre : les parenthèses sont facultatives (
n => n * 2) ; aucun ou plusieurs : obligatoires. - Une seule expression : pas d'accolades ni de
return, le résultat est renvoyé automatiquement (retour implicite). - Pour renvoyer un objet directement, on l'entoure de parenthèses :
() => ({ nom, note }), sinon les accolades seraient prises pour un bloc. - Avec des accolades, il faut écrire
returnexplicitement.
3. Quand ne pas utiliser une fonction fléchée
Une fonction fléchée n'a pas son propre this: elle utilise celui de l'endroit où elle est écrite. C'est un avantage dans un callback
(la fléchée de afficherNotes retrouve this.nom), mais un piège pour une méthode d'objet (presenterFlechee ne
connaît pas this.nom). Elle n'a pas non plus d'objet arguments et ne peut pas servir de constructeur avec new. Le mot-clé this est détaillé au chapitre 16.
Cette leçon a été mise à jour. L'ancienne version décrivait la flèche comme un « signe égal plus une parenthèse carrée fermante » (c'est le signe
>, « supérieur à »), et affirmait que arrayProduct.map((item) => item.id === 3) renvoie l'élément d'identifiant 3 :
map renvoie un tableau de booléens ([false, false, true…]) ; pour trouver l'élément, il faut find (leçon 10.7).
L'exemple du bouton avait une balise </script> mal fermée et utilisait l'attribut onclick, remplacé par addEventListener (chapitre 13).• Déclaration : remontée, appelable avant sa ligne ; expression et fléchée : seulement après.
•
(a, b) => a + b: retour implicite ; avec accolades, return obligatoire ; objet : () => ({ … }). • Fléchées : idéales pour les callbacks ; pas pour les méthodes d'objet (pas de
this propre).• Une expression de fonction se termine par un point-virgule, comme toute affectation.
🛠 Activité 5 — Convertir en fonctions fléchées
Mission : Reprenez les fonctions de l'activité 1 (max2, estPair…) et réécrivez-les sous les trois formes.
Questions pour avancer (répondez dans votre compte rendu, puis appliquez dans votre projet) :
- Réécrivez
max2en expression de fonction, puis en fonction fléchée sur une seule ligne. Quel mot-clé disparaît dans la version fléchée ? - Écrivez une fonction fléchée
factorielle(n)récursive. Pourquoi ne peut-elle pas tenir sur une ligne sans l'opérateur ternaire ? - Écrivez
creerStagiaire(nom, groupe)qui renvoie un objet, en fonction fléchée à retour implicite. Que se passe-t-il si vous oubliez les parenthèses autour de l'objet ? - Appelez une fonction fléchée avant sa définition. Quelle erreur obtenez-vous ? Quelle forme permet d'organiser un fichier « fonctions principales en haut, détails en bas » ?
- Créez un objet
chronometreavec une propriétésecondeset une méthodeafficherécrite en fléchée. Que vautthis.secondes? Corrigez. - Utilisez
mapet une fléchée pour convertir un tableau de notes sur 20 en notes sur 100, puisfindpour trouver la première note supérieure à 15.
Je vérifie / je rends :
- ☐ Un tableau comparatif des trois écritures, rempli à partir de vos essais.
← Les paramètres par défaut et les paramètres restLes fonctions prédéfinies en JavaScript →