← Tutti gli episodi
Copertina di Funzioni che ricordano: le chiusure
Stagione 45 · Episodio 004

Funzioni che ricordano: le chiusure

6 settembre 2026 4:51
0:00 4:51

Ciao, e benvenuto nella quarta puntata della quarantacinquesima stagione. Nella scorsa puntata abbiamo visto le funzioni come valori, cose che si tengono in mano. Oggi aggiungiamo un potere in più, uno dei più eleganti e, all'inizio, dei più misteriosi di JavaScript: le funzioni non solo agiscono, ma ricordano. Ricordano il mondo in cui sono nate. Questa idea si chiama chiusura, e una volta che la vedi, è di una bellezza limpida. Oggi capiamo le funzioni che ricordano.

Partiamo dall'idea, perché è sorprendente. Quando crei una funzione dentro un'altra funzione, quella funzione interna non nasce nel vuoto: nasce circondata da un piccolo mondo, le variabili che le stanno intorno in quel momento. E la cosa straordinaria è questa: la funzione interna si porta dietro il ricordo di quel mondo, anche dopo che la funzione esterna ha finito ed è sparita. Se ne va in giro tenendo con sé una memoria viva e privata del luogo in cui è nata. Non dimentica il suo posto di nascita: lo porta con sé, ovunque vada.

Voglio darti il nome e la definizione, perché sono precisi. Questa combinazione ha un nome: si chiama chiusura. Una chiusura è una funzione più il piccolo fagotto di cose ricordate che si è portata via dalla sua nascita. Non è solo la funzione, il comportamento: è la funzione insieme al suo mondo privato, quello che la circondava quando è venuta al mondo. La funzione e la sua memoria, in un unico pacchetto inseparabile, che viaggia insieme. Quando la funzione poi verrà usata, chissà dove e chissà quando, avrà ancora accesso a quel suo mondo di origine.

Voglio mostrarti a cosa serve, perché è utilissima. Perché è preziosa questa cosa? Perché permette a una funzione di avere una memoria privata e persistente, che nessun altro può toccare. Pensa a un contatore che ricorda a che numero è arrivato, tra una chiamata e l'altra, custodendo il conteggio nel suo fagotto privato. O a una funzione già preparata con un'impostazione che userà sempre, cucita dentro di sé. È il modo di dare a un pezzo di comportamento uno stato tutto suo, che ricorda, senza esporre quella memoria al resto del programma. Un piccolo segreto privato, che la funzione custodisce e nessun altro vede.

Voglio farti un esempio concreto, perché lo tocchi con mano. Immagina di costruire una funzione che saluta con un nome preciso. La crei una volta sola, dandole il nome, per esempio Anna. Da quel momento in poi, quella funzione ricorda quel nome, in privato, e saluta sempre con esso: ciao Anna, ogni volta che la usi, anche a distanza di tempo, anche quando il momento in cui le hai dato il nome è ormai lontanissimo. Il nome vive dentro la funzione, nel suo fagotto di ricordi. Ne potresti creare un'altra che saluta un nome diverso, e ognuna custodisce il suo, senza confondersi. Ciascuna con la sua piccola memoria privata.

Voglio darti l'immagine che rende chiara questa idea, perché è poetica. Pensa a una funzione come a una persona che, ovunque andrà poi nella vita, si porta dietro una busta sigillata di appunti presi nella stanza in cui è nata. Può sempre rileggere i suoi appunti privati, ma nessun altro può aprirli. E quegli appunti restano con lei per sempre, anche molto dopo che quella stanza è stata smontata e non esiste più. La chiusura è quella busta: una memoria sigillata, privata, e portatile, che la funzione tiene con sé per tutta la sua esistenza, e a cui solo lei può attingere.

Voglio trarre la lezione generale, perché va oltre JavaScript. C'è qualcosa di quietamente profondo, qui: la capacità di legare insieme un comportamento e una memoria privata e persistente della sua origine è uno strumento potente. È il modo di dare a un pezzo di comportamento un suo piccolo mondo da ricordare, che si porta appresso ovunque. E ci ricorda una cosa che questo podcast dice sempre: quello che sembra magia, il fatto che una funzione ricordi qualcosa da un tempo lontano, non è magia. È un modello preciso, quello della busta sigillata. Capito il modello, la magia diventa meccanismo comprensibile. Le chiusure sono magiche solo finché non ne vedi la stanza di nascita.

Per oggi ci fermiamo qui. Abbiamo aggiunto un potere elegante: le funzioni non solo agiscono, ma ricordano il mondo in cui sono nate. Quando una funzione nasce dentro un'altra, si porta dietro una memoria viva e privata delle variabili che la circondavano, anche dopo che l'esterna è sparita: questa è la chiusura, la funzione più il suo fagotto di ricordi, in un pacchetto inseparabile. Serve a dare a un comportamento una memoria privata e persistente, un contatore che ricorda, un saluto già pronto con un nome cucito dentro. Come una persona che porta con sé una busta sigillata di appunti dalla stanza in cui è nata. La lezione: legare comportamento e memoria privata è potente, e ciò che sembra magia è un modello preciso. Nella prossima puntata mettiamo tutto insieme sul tempo: dal richiamo alla promessa. Nelle note trovi qualche spunto. Se ti è utile, condividila. Grazie per l'ascolto, e ci sentiamo alla prossima.