Estou estudando THREE.js e percebi um padrão em que as funções são definidas assim:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Veja o exemplo do método de raycast aqui ).
A variação normal de tal método seria assim:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Comparando a primeira versão com a variação normal , a primeira parece diferir em que:
- Ele atribui o resultado de uma função autoexecutável.
- Ele define uma variável local dentro desta função.
- Ele retorna a função real contendo a lógica que faz uso da variável local.
Portanto, a principal diferença é que na primeira variação a barra é atribuída apenas uma vez, na inicialização, enquanto a segunda variação cria essa variável temporária toda vez que é chamada.
Meu melhor palpite sobre por que isso é usado é que ele limita o número de instâncias de bar (haverá apenas uma) e, portanto, economiza sobrecarga de gerenciamento de memória.
Minhas perguntas:
- Esta suposição está correta?
- Existe um nome para este padrão?
- Por que isso é usado?