Ist dies ein gültiger Anwendungsfall für das Schließen von JavaScript?

8

Ich habe alle anderen (ausgezeichneten) Antworten auf SO durchgeschaut (besonders das: How do JavaScript-Schließungen funktionieren? ), aber ich wollte Ihr Feedback zu meinem Verständnis des Konzepts.

Ich verstehe, dass ein Anwendungsfall darin besteht, die Implementierung privater Methoden vor öffentlichem Zugriff zu verbergen.

Das andere, an das ich denke, ist, es als Fabrikgenerator zu haben:

%Vor%

Dies gibt aus:

%Vor% Glauben Sie, dass es sich um einen gültigen Anwendungsfall für Schließungen handelt (d. h. mehrere Fabriken mit derselben Codebasis erstellen)? Oder kann ich dasselbe mit etwas viel Besserem erreichen?

Bitte beachten Sie, dass es weniger um die technische Umsetzung von Closures geht, als vielmehr um gültige Anwendungsfälle in der Anwendungsentwicklung.

Danke.

    
Muhammad 16.07.2012, 00:21
quelle

3 Antworten

3

Ja, Variablen privat zu halten ist eine gültige Verwendung für eine Schließung. Es ermöglicht Ihnen, privaten Zugriff auf eine Variable zu haben, ohne es zu einem öffentlichen Mitglied zu machen.

Siehe diese Referenz für andere Beispiele: Ссылка

    
jfriend00 16.07.2012, 00:30
quelle
1

Wenn ich Ihre Frage richtig verstanden habe, geht es Ihnen nicht darum, die Eigenschaft make privat zu halten? Wenn das der Fall ist, dann ist eine Schließung nicht wirklich notwendig, und Sie könnten die gleiche Funktionalität mit einem Prototyp erreichen ...

%Vor%

Welche Vorteile hat die Leistung (verringerter Speicher und erhöhte Geschwindigkeit), wie in diese Frage .

    
market 16.07.2012 00:39
quelle
0

Closures sind ein extrem mächtiges Konstrukt mit vielen nützlichen Anwendungen. Der, den du benutzt hast, ist eigentlich ein "Hack". Die gebräuchlichste Verwendung für Closures ist, wenn Sie einige Funktionen implementiert haben, die "etwas in der Mitte tun" ... und dass "etwas" zu mehr oder weniger konfiguriert werden kann, was immer Sie wollen ... Zum Beispiel die jQuery ajax-Funktionalität kann etwas tun, wenn die Anfrage einen Fehler hat, oder wenn es erfolgreich war, etc ... Wenn Sie keine Closures hätten, könnten Sie nur eine "statisch definierte" Funktion übergeben, die wahrscheinlich den Kontext erfassen muss, der benötigt wird, um das zu tun, was Sie von globalen Variablen machen wollen, oder Sie müssen das tun Verwenden Sie die gleiche Signatur für alle Funktionen wie in C oder C ++ wie Funktion (customData) {} ... Mit Closures können Sie zur Laufzeit "dynamisch Funktionen erstellen" und den Kontext, den sie bei der Erstellung hatten, neu definieren. So können Sie die Module, die etwas "tun" müssen, auf einfache Weise (im Vertrag) weitergeben mit was man in c oder c ++ oder ohne closures machen würde, dass es hässlich, fehleranfällig und auch ein hack ist).

Wenn Sie also einige benutzerdefinierte Funktionen in etwas "konfigurieren" müssen, verwenden Sie eine Schließung ...

    
user1494736 16.07.2012 00:38
quelle