Arrow functions, scope, closures, callbacks et fonctions d'ordre supérieur
// Fonction classique
function saluer(nom) {
return "Bonjour " + nom;
}
// Arrow function — syntaxe courte
const saluer = (nom) => "Bonjour " + nom;
// Si un seul paramètre, pas besoin de parenthèses
const doubler = n => n * 2;
// Si plusieurs lignes, on garde les { } et le return
const calculer = (a, b) => {
const somme = a + b;
return somme * 2;
};
const fn = () => { valeur: 42 }; // retourne undefined !
const fn = () => ({ valeur: 42 }); // ← entoure l'objet de ()
let global = "je suis partout";
function maFonction() {
let local = "je suis seulement ici";
console.log(global); // ✅ accessible
console.log(local); // ✅ accessible
}
console.log(global); // ✅
console.log(local); // ❌ ReferenceError
Block scope avec let et const :
if (true) {
let x = 10; // scope = ce bloc {}
const y = 20;
}
console.log(x); // ❌ ReferenceError
var (raison de l'éviter) :
if (true) {
var z = 30; // var ignore les blocs
}
console.log(z); // 30 ← surprise !
Une closure, c'est une fonction qui se souvient de son contexte de création.
function creerCompteur() {
let count = 0; // variable "enfermée" dans la closure
return function() {
count++;
return count;
};
}
const compteur = creerCompteur();
console.log(compteur()); // 1
console.log(compteur()); // 2
console.log(compteur()); // 3
// count est protégée — personne ne peut y accéder directement
Un callback = une fonction passée en argument à une autre fonction.
function faireCeci(action) {
console.log("Avant...");
action(); // ← on exécute le callback
console.log("Après.");
}
faireCeci(() => console.log("Je suis le callback !"));
// Avant...
// Je suis le callback !
// Après.
Cas concret : setTimeout (tu verras plus en Module 05) :
setTimeout(() => console.log("3 secondes plus tard"), 3000);
Une fonction qui prend une fonction en paramètre ou retourne une fonction.
// Prend une fonction
function appliquer(tableau, transformation) {
const resultat = [];
for (const item of tableau) {
resultat.push(transformation(item));
}
return resultat;
}
const nombres = [1, 2, 3, 4];
const doubles = appliquer(nombres, n => n * 2);
console.log(doubles); // [2, 4, 6, 8]
map(), filter(), reduce() (Module 03).function saluer(nom = "inconnu", lang = "fr") {
if (lang === "fr") return `Bonjour ${nom}`;
if (lang === "en") return `Hello ${nom}`;
}
saluer("Alice"); // "Bonjour Alice"
saluer("Bob", "en"); // "Hello Bob"
saluer(); // "Bonjour inconnu"
| Concept | Exemple court |
|---|---|
| Arrow fn | const f = x => x * 2 |
| Scope | let et const sont block-scoped |
| Closure | fonction qui retient sa variable locale |
| Callback | btn.addEventListener('click', fn) |
| Ordre sup. | appliquer(tab, fn) |
Applique closures, callbacks et fonctions d'ordre supérieur dans un projet concret.
Télécharge les fichiers, ouvre-les dans ton éditeur et travaille directement dedans.
4 exercices sur les arrow functions, closures, callbacks et la mémoïsation.
Corrections complètes. À consulter après avoir essayé.