"Une fermeture est un objet de pauvre, un objet est une fermeture de pauvre." (Désolé, j'ai oublié la source).
Parfois, nous avons besoin de variables qui ne sont nécessaires que par un bloc de code. Nous mettons ce bloc de code dans une fonction et avons ces variables comme variables locales à cette fonction.
Parfois, nous avons besoin de variables qui sont nécessaires par tous les les fonctions/blocs-de-code dans le programme. Nous pouvons avoir ces variables comme variables globales.
Parfois, nous avons besoin de variables qui sont nécessaires par certains fonctions/blocs-de-code. Par exemple, nous avons une entité appelée Ventes et nous voulons mettre tout notre code lié aux ventes ensemble. Nous avons donc un groupe de fonctions et un groupe de variables qui traitent des ventes. Nous pouvons regrouper ces fonctions et ces variables dans un objet, afin qu'elles soient isolées (à la fois les fonctions et les variables) des autres parties du code.
Dans les langues qui ne prennent pas directement en charge les objets, nous pouvons avoir des fonctions imbriquées. La fonction externe agit comme une classe, les fonctions internes agissent comme des méthodes. Les variables locales à la fonction externe agissent comme des champs, elles ne sont accessibles qu'aux fonctions internes. Dans les appels ultérieurs aux fonctions internes, nous voulons maintenir l'état des variables de la fonction locale vers la fonction externe, c'est là que les fermetures sont nécessaires. Tout ce que nous avons à faire est de passer la référence à toute fonction interne via la sortie de la fonction externe, de coder en dehors de la fonction externe, de sorte que les variables de fonction externe accédées par la fonction interne soient préservées même après la sortie de la fonction externe.
Regardez ici pour un grand nombre de réponses: http://stackoverflow.com/questions/111102/how-does-a-javascript-closure-work –