Studiuję THREE.js i zauważyłem wzorzec, w którym funkcje są zdefiniowane w następujący sposób:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Przykład patrz metoda raycast tutaj ).
Normalna zmienność w taki sposób będzie wyglądać następująco:
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Porównując pierwszą wersję z normalną odmianą, pierwsza wydaje się różnić tym:
- Przypisuje wynik samowykonującej się funkcji.
- Definiuje zmienną lokalną w ramach tej funkcji.
- Zwraca rzeczywistą funkcję zawierającą logikę, która korzysta ze zmiennej lokalnej.
Zatem główna różnica polega na tym, że w pierwszej wariacji słupek jest przypisywany tylko raz, podczas inicjalizacji, podczas gdy druga zmiana tworzy tę zmienną tymczasową za każdym razem, gdy jest wywoływana.
Moje najlepsze przypuszczenie, dlaczego jest to używane, jest takie, że ogranicza liczbę wystąpień paska (będzie tylko jeden), a tym samym oszczędza obciążenie związane z zarządzaniem pamięcią.
Moje pytania:
- Czy to założenie jest słuszne?
- Czy jest jakaś nazwa tego wzoru?
- Dlaczego to jest używane?