Chiusure in JavaScript

Mar 07 2023
In JavaScript la funzione è un blocco di codice progettato per eseguire un'attività specifica. Funziona quando lo invochi.
Chiusure in JavaScript

In JavaScript la funzione è un blocco di codice progettato per eseguire un'attività specifica. Funziona quando lo invochi.

Per esempio:

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

myFunction("Hello there!!")

myFunction("Welcome, boss")

Ma cosa succede se vogliamo sapere cosa è successo durante la prima o la precedente esecuzione. Ecco dove arrivano le chiusure.

Cosa sono le chiusure?

In parole semplici, quando una funzione restituisce un'altra funzione , che ha accesso all'ambito delle sue funzioni esterne, viene definita chiusura in JavaScript.

Per esempio:

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


const result = outer()

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

Quindi in qualche modo JavaScript sta ricordando il countervalore precedente e lo sta facendo un'operazione matematica.
Potresti chiedere come lo sta facendo Js?

Quando una funzione restituisce una funzione, non restituisce solo la funzione, ma restituisce anche l'ambito lessicale di tale funzione. Tutte quelle variabili, dati correlati a quella funzione restituita come proprietà nascosta insieme a quella funzione restituita. Quella proprietà nascosta chiamata ancheBackpack

Questo zaino ha molti nomi:

  • Chiuso su 'Ambiente variabile' (COVE)
  • Dati di riferimento dell'ambito lessicale persistente (PLSRD)
  • Zaino
  • Chiusura

Vediamo un altro esempio:

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


Perché chiusure:

  • Ci aiuta a creare una funzione di supporto che abilita potenti funzioni come once e memoize.
  • Ci aiuta a creare iteratori e generatori utilizzando l'ambito lessicale e le chiusure.
  • Molti modelli di progettazione JavaScript, incluso il modello del modulo, utilizzano la chiusura, preservando lo stato di un'applicazione senza inquinare lo spazio dei nomi globale.
  • I callback e le promesse si basano sulle chiusure per mantenere lo stato nel mondo JavaScript asincrono.