Quando parliamo di 'una chiusura' ci riferiamo a una singola variabile, o ci riferiamo a tutte le variabili 'chiuse'?

7

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 )?

    
posta Michiel van Oosterhout 21.01.2012 - 11:44
fonte

2 risposte

12

"Una chiusura" è una funzione che si chiude su una o più variabili, non sulle variabili che sono chiuse. Quindi è una chiusura unica.

    
risposta data 21.01.2012 - 12:09
fonte
3

Una chiusura è una funzione di prima classe che cattura i collegamenti lessicali delle variabili definite nel suo ambiente. Quando cattura i binding, si dice che "ha chiuso" le variabili.

Nota: questo significa che chiusure esistono solo in fase di runtime (una volta che ha "chiuso sopra" variabili).

Quindi nell'esempio sopra viene creata una chiusura singola quando il codice viene eseguito. Questa chiusura è "chiusa sopra" le variabili x e y .

    
risposta data 21.01.2012 - 20:43
fonte

Leggi altre domande sui tag