Une fermeture est un concept JavaScript fondamental dans lequel une fonction interne a accès aux variables et aux paramètres de sa fonction externe (englobante), même après que la fonction externe a fini de s'exécuter. En termes plus simples, une fermeture permet à une fonction de « se souvenir » et d'accéder aux variables depuis sa portée externe même lorsque la fonction est exécutée dans une portée différente.
Chaque fermeture en JavaScript a accès à trois portées :
Comprenons la portée lexicale avec un exemple de base :
function init() { var name = "Mozilla"; // local variable created by init function displayName() { // inner function console.log(name); // uses variable declared in parent function } displayName(); } init();
Dans cet exemple :
Regardons une version légèrement modifiée qui démontre la fermeture :
function makeFunc() { const name = "Mozilla"; function displayName() { console.log(name); } return displayName; } const myFunc = makeFunc(); myFunc();
Points clés à comprendre :
Voici un exemple plus pratique qui démontre le pouvoir des fermetures :
function makeAdder(x) { return function(y) { return x + y; }; } const add5 = makeAdder(5); const add10 = makeAdder(10); console.log(add5(2)); // outputs 7 console.log(add10(2)); // outputs 12
Décomposons ce qui se passe :
Ils partagent la même définition de fonction
Mais ils ont des environnements lexicaux différents
Dans l'environnement d'add5, x vaut 5
Dans l'environnement d'add10, x vaut 10
Les fermetures sont puissantes car elles permettent :
Comprendre les fermetures est crucial pour les développeurs JavaScript, car elles sont largement utilisées dans les modèles, frameworks et bibliothèques JavaScript modernes. Ils fournissent un moyen de créer des variables privées et de maintenir l'état dans la programmation fonctionnelle tout en gardant votre code propre et maintenable.
Rappelez-vous : Une fermeture n'est pas seulement une fonction à l'intérieur d'une autre fonction - c'est une fonction qui a accès aux variables dans sa portée externe et maintient cet accès même après la fin de l'exécution de la fonction externe.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!