Fermetures en JavaScript

Mar 07 2023
En JavaScript, la fonction est un bloc de code conçu pour effectuer une tâche spécifique. Il s'exécute lorsque vous l'invoquez.
Fermetures en JavaScript

En JavaScript, la fonction est un bloc de code conçu pour effectuer une tâche spécifique. Il s'exécute lorsque vous l'invoquez.

Par exemple:

function myFunction(message){
  console.log(message)
}

myFunction("Hello there!!")

myFunction("Welcome, boss")

Mais que se passe-t-il si nous voulons savoir ce qui s'est passé lors de la première ou de la précédente exécution. C'est là que les fermetures arrivent.

Qu'est-ce que les Fermetures ?

En termes simples, lorsqu'une fonction renvoie une autre fonction qui a accès à la portée de ses fonctions externes, on parle de fermetures en JavaScript.

Par exemple:

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}


const result = outer()

function inner (){
  counter++;
  return counter;
}

Donc, d'une manière ou d'une autre, JavaScript se souvient de la countervaleur précédente et effectue une opération mathématique.
Vous vous demandez peut-être comment Js fait ça ?

Lorsqu'une fonction renvoie une fonction, elle ne renvoie pas seulement la fonction, elle renvoie également la portée lexicale de cette fonction. Toutes ces variables , les données liées à cette fonction renvoyée en tant que propriété cachée avec cette fonction renvoyée. Cette propriété cachée aussi appeléeBackpack

Ce sac à dos porte plusieurs noms :

  • Fermé sur 'Variable Environment' (COVE)
  • Données référencées à portée lexicale persistante (PLSRD)
  • Sac à dos
  • Fermeture

Examinons un autre exemple :

function outer (){
  let counter = 0;
  function inner (){
    counter++;
    return counter;
  }
  return inner
}

const result = outer()

result() // 1
result() // 2

const anotherResult = outer()
anotherResult() // 1
anotherResult() // 2


Pourquoi les fermetures :

  • Cela nous aide à créer une fonction d'assistance qui active des fonctions puissantes comme Once et Memoize.
  • Nous aide à créer des itérateurs et des générateurs en utilisant la portée lexicale et les fermetures.
  • De nombreux modèles de conception JavaScript, y compris le modèle de module, utilisent la fermeture, en préservant l'état d'une application sans polluer l'espace de noms global.
  • Les rappels et les promesses s'appuient sur les fermetures pour conserver l'état dans le monde JavaScript asynchrone.