Estoy estudiando THREE.js y noté un patrón donde las funciones se definen así:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Ejemplo, vea el método raycast aquí ).
La variación normal de dicho método se vería así:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Comparando la primera versión con la variación normal , la primera parece diferir en que:
- Asigna el resultado de una función autoejecutable.
- Define una variable local dentro de esta función.
- Devuelve la función real que contiene la lógica que hace uso de la variable local.
Entonces, la principal diferencia es que en la primera variación, la barra solo se asigna una vez, en la inicialización, mientras que la segunda variación crea esta variable temporal cada vez que se llama.
Mi mejor conjetura sobre por qué se usa esto es que limita el número de instancias de bar (solo habrá una) y, por lo tanto, ahorra la sobrecarga de administración de memoria.
Mis preguntas:
- ¿Es esta suposición correcta?
- ¿Hay un nombre para este patrón?
- ¿Por qué se usa esto?