Sto studiando THREE.js e ho notato un modello in cui le funzioni sono definite in questo modo:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Esempio vedere il metodo raycast qui ).
La normale variazione di un tale metodo sarebbe simile a questa:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Confrontando la prima versione con la variante normale , la prima sembra differire in quanto:
- Assegna il risultato di una funzione autoeseguibile.
- Definisce una variabile locale all'interno di questa funzione.
- Restituisce la funzione effettiva contenente la logica che utilizza la variabile locale.
Quindi la differenza principale è che nella prima variazione la barra viene assegnata una sola volta, all'inizializzazione, mentre la seconda variazione crea questa variabile temporanea ogni volta che viene chiamata.
La mia ipotesi migliore sul motivo per cui viene utilizzato è che limita il numero di istanze per bar (ce ne sarà solo una) e quindi risparmia il sovraccarico di gestione della memoria.
Le mie domande:
- Questa ipotesi è corretta?
- C'è un nome per questo modello?
- Perché viene utilizzato?