Ich studiere THREE.js und habe ein Muster festgestellt, in dem Funktionen wie folgt definiert sind:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Beispiel siehe Raycast-Methode hier ).
Die normale Variante einer solchen Methode würde folgendermaßen aussehen:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Vergleicht man die erste Version mit der normalen Variante, so scheint sich die erste darin zu unterscheiden:
- Es weist das Ergebnis einer selbstausführenden Funktion zu.
- Es definiert eine lokale Variable innerhalb dieser Funktion.
- Es gibt die eigentliche Funktion zurück, die die Logik enthält, die die lokale Variable verwendet.
Der Hauptunterschied besteht also darin, dass in der ersten Variante der Balken bei der Initialisierung nur einmal zugewiesen wird, während die zweite Variante diese temporäre Variable bei jedem Aufruf erstellt.
Meine beste Vermutung, warum dies verwendet wird, ist, dass es die Anzahl der Instanzen für Balken begrenzt (es wird nur eine geben) und somit Speicherverwaltungsaufwand spart.
Meine Fragen:
- Ist diese Annahme richtig?
- Gibt es einen Namen für dieses Muster?
- Warum wird das verwendet?