Prendiamo il seguente codice (JavaScript) che restituisce una funzione che si chiude sopra le variabili x
e y
per illustrare:
function test() {
var x = Math.random();
var y = Math.random();
var f = function() {
console.log(x, y);
};
return f;
}
test()();
Il codice non ha senso, voglio solo chiudere oltre x
e y
.
Le variabili x
e y
non esistono al di fuori della funzione test
ma rimangono disponibili nella funzione f
.
Escludendo eventuali ottimizzazioni del compilatore (come inlining), diciamo che esiste una chiusura singola ( creata da f
), oppure diciamo che ci sono due chiusure ( per / over x
e y
)?