2015-11-20 14 views
6

So che un modulo come questo:Qual è la differenza tra una chiusura e un modulo?

function User(){ 
    var username, password; 

    function doLogin(user, pw){ 
     username = user; 
     password = pw; 
    }; 
    var publicAPI = { 
     login: doLogin 
    }; 
    return publicAPI; 
} 

ha una chiusura all'interno di esso: doLogin, ed è ricordare i valori delle variabili username e password che si trovano all'interno User, ciò che rende questo un "chiusura" . Quello che non capisco è se ogni volta che usiamo una chiusura stiamo usando il modello del modulo? o non appena salvi la funzione di User in una variabile come var User = function(){... non è un modulo ... Tieni presente che sto imparando js.

+2

Il modello di modulo utilizza chiusure, non il contrario. Le chiusure sono parte integrante del linguaggio, i moduli sono solo uno * schema * che è emerso da loro (e ci sono molte altre cose che puoi fare con le chiusure). – Bergi

risposta

4

È stata implementata una funzione di fabbrica per User s.

Si sta "quasi" utilizzando il modello del modulo rivelatore. La maggior parte delle persone direbbe che il modello del modulo rivelatore dovrebbe essere invocato immediatamente. I modelli di modulo vengono solitamente utilizzati per l'organizzazione del codice. Quello che hai qui è invece una fabbrica di oggetti.

Le chiusure vengono utilizzate dal modello (rivelatore) del modulo (e altri) per ottenere l'incapsulamento dello stato privato.

Una chiusura viene creata ogni volta che viene definita una funzione. Sono una funzionalità linguistica di JavaScript per facilitare l'utilizzo delle funzioni.

+1

Lo chiamerei modello di fabbrica. La parola "modulo" viene solitamente utilizzata solo per oggetti creati staticamente, in cui la chiusura è un IEFE. – Bergi

0

Le chiusure sono un modo per chiudere (o acquisire) informazioni o stati dall'ambito di chiusura. Fondamentalmente è un mezzo per estendere la durata di una variabile.

I moduli sono un modo per nascondere l'implementazione e lo stato dal mondo esterno.

Quindi, doLogin() si sta chiudendo su entrambi username e password e quindi aumentandone la durata. E l'oggetto a cui è stato fatto riferimento per publicAPI nasconde l'implementazione di doLogin() all'utente

Problemi correlati