Qu’est-ce qu’une fermeture en JavaScript ?

Les fermetures (Closure) permettent aux programmeurs JavaScript d’écrire un code lisible. Nous utilisons fréquemment des fermetures en JavaScript et, quelle que soit votre expérience en JavaScript, vous les rencontrerez sans cesse. Bien sûr, les fermetures peuvent paraître complexes et au-delà de votre portée, mais quand vous lisez cet article, les fermetures seront beaucoup plus faciles à comprendre.
 
 

Qu’est-ce qu’une fermeture?

Chaque fois qu’une fonction est appelée, une nouvelle portée est créée pour cet appel. La variable locale déclarée à l’intérieur de la fonction appartient à cette fonction – on ne peut y accéder qu’à partir de cette fonction.

Lorsque la fonction a terminé l’exécution, la portée est généralement détruite. Voici un exemple simple:

function getMessage(name) { 
    var msg = "Hi, " + name; 
    return msg;
}

La fonction getMessage() déclare une variable locale « msg » et la renvoie. Chaque appel de fonction crée une nouvelle portée avec une nouvelle variable locale et une fois la fonction exécutée, nous n’avons plus aucun moyen de faire référence à cette portée.
Fonctions pures en JavaScript

function getMessage(name) { 
    var msg = "Hi, " + name; 
    var sayWelcome = function() {
        var welcome = msg + ", Welcom to WayToLearnX.com";
        console.log(welcome); 
    };
    return sayWelcome; 
}

var sayMyName = getMessage("Yohan");
sayMyName();  // Hi, Yohan, Welcom to WayToLearnX.com
sayMyName();  // Hi, Yohan, Welcom to WayToLearnX.com
sayMyName();  // Hi, Yohan, Welcom to WayToLearnX.com
 
La fonction sayWelcome() de cet exemple est une fermeture.

Une fermeture est une fonction qui a accès à une variable depuis la portée d’une autre fonction. Ceci est achevé en créant une fonction dans une fonction. Bien entendu, la fonction externe n’a pas accès à la portée interne.

La fonction sayWelcome() a sa propre portée locale (avec la variable « welcome ») et a également accès à la portée de la fonction externe (englobante). Dans ce cas là, la variable « msg » de getMessage().

Une fois l’exécution de getMessage() terminée, la portée n’est pas détruite dans ce cas là. La fonction sayWelcome() y a toujours accès. Pourtant, il n’existe aucun autre moyen d’accéder aux données à partir de la portée externe, à l’exception d’une fermeture.
 

Quand utiliser une fermeture?

Les fermetures sont utilisées pour masquer les détails d’une implémentation en JavaScript. En d’autres termes, il peuvent être utilisées pour créer des variables ou des fonctions privées.
QCM Javascript

2 réflexions sur “Qu’est-ce qu’une fermeture en JavaScript ?

  • décembre 30, 2019 à 6:28 pm
    Permalien

    Bonjour,
    pour les 3 lignes à la fin => sayWelcome();
    je pense qu’il faut appeler sayMyName() à la place

    Merci pour ce site!

    Répondre
    • décembre 31, 2019 à 12:52 am
      Permalien

      Merci pour cette remarque, c’est corrigé 🙂

      Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *