2015-11-20 10 views
6

Ich weiß, dass ein Modul wie diese:Was ist der Unterschied zwischen einer Schließung und einem Modul?

function User(){ 
    var username, password; 

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

einen Verschluss nach innen von ihm hat: doLogin, und die Werte der Variablen username und password erinnern, die in User sind, was macht dies eine „Schließung“ . Was ich nicht ganz verstehe, ist, wenn wir einen Verschluss benutzen, benutzen wir das Modulmuster? oder sobald ich die Funktion der User in einer Variablen wie var User = function(){... speichere kein Modul ist ... Bitte beachte, ich lerne js.

+2

Das Modul Muster verwendet Schließungen, nicht umgekehrt. Verschlüsse sind ein fester Bestandteil der Sprache, Module sind nur ein * Muster *, das aus ihnen hervorging (und es gibt eine Menge anderer Dinge, die man mit Schließungen machen kann). – Bergi

Antwort

4

Sie haben eine Factory-Funktion für User s implementiert.

Sie sind "fast" mit dem aufschlussreichen Modulmuster. Die meisten Leute würden sagen, dass das enthüllende Modulmuster sofort aufgerufen werden müsste. Modulmuster werden normalerweise für die Codeorganisation verwendet. Was Sie hier haben, ist stattdessen eine Objektfabrik.

Verschlüsse werden von dem (aufdeckenden) Modulmuster (und anderen) verwendet, um die Verkapselung des privaten Zustands zu erreichen.

Eine Schließung wird immer dann erstellt, wenn eine Funktion definiert ist. Sie sind eine Sprachfunktion von JavaScript, um das Arbeiten mit Funktionen zu vereinfachen.

+1

Ich würde es ein Fabrikmuster nennen. Das Wort "Modul" wird normalerweise nur für statisch erstellte Objekte verwendet, wobei die Schließung ein IEFE ist. – Bergi

0

Verschlüsse sind eine Möglichkeit, Informationen oder Zustände aus dem umschließenden Bereich zu schließen (oder zu erfassen). Grundsätzlich ist es ein Mittel, um die Lebensdauer einer Variablen zu verlängern.

Module sind eine Möglichkeit, die Implementierung und den Zustand vor der Außenwelt zu verbergen.

Also, doLogin() schließt über username und password und erhöht somit ihre Lebensdauer. Und Objekt, auf das von publicAPI verwiesen wird, verbirgt die Implementierung von doLogin() vom Benutzer

Verwandte Themen