J'étudie THREE.js et j'ai remarqué un modèle où les fonctions sont définies comme suit:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Exemple voir la méthode raycast ici ).
La variation normale d'une telle méthode ressemblerait à ceci:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
En comparant la première version à la variante normale , la première semble différer en cela:
- Il affecte le résultat d'une fonction auto-exécutable.
- Il définit une variable locale au sein de cette fonction.
- Il renvoie la fonction réelle contenant la logique qui utilise la variable locale.
Ainsi, la principale différence est que dans la première variante, la barre n'est affectée qu'une seule fois, à l'initialisation, tandis que la seconde variante crée cette variable temporaire à chaque fois qu'elle est appelée.
Ma meilleure estimation sur la raison pour laquelle cela est utilisé est qu'il limite le nombre d'instances pour bar (il n'y en aura qu'une) et économise ainsi la gestion de la mémoire.
Mes questions:
- Cette hypothèse est-elle correcte?
- Y a-t-il un nom pour ce modèle?
- Pourquoi est-ce utilisé?