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 JavaScriptDans ce tutoriel, nous allons découvrir un principe important dans la programmation fonctionnelles en Javascript, « des fonctions pures ». Dans ce tutoriel, vous allez apprendre ce…Lire plus
Mais qu’est-ce passe-t-il lorsque nous avons un lien vers cette portée? Regardons la fonction suivante:
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 – Partie 1QCM sur Javascript avec des réponses pour la préparation des tests techniques, des tests en ligne, aux examens et aux certifications. Ces questions et réponses…Lire plus
Bonjour,
pour les 3 lignes à la fin => sayWelcome();
je pense qu’il faut appeler sayMyName() à la place
Merci pour ce site!
Merci pour cette remarque, c’est corrigé 🙂