Я вивчаю THREE.js і помітив шаблон, де функції визначені так:
var foo = ( function () {
var bar = new Bar();
return function ( ) {
//actual logic using bar from above.
//return result;
};
}());
(Приклад см метод raycast тут ).
Нормальне зміна такого методу буде виглядати наступним чином :
var foo = function () {
var bar = new Bar();
//actual logic.
//return result;
};
Порівнюючи першу версію із звичайною варіацією, перша здається відрізняється від цього:
- Він призначає результат самовиконання функції.
- Він визначає локальну змінну в межах цієї функції.
- Він повертає фактичну функцію, що містить логіку, яка використовує локальну змінну.
Отже, головна відмінність полягає в тому, що в першому варіанті смуга призначається лише один раз, при ініціалізації, а в другому варіанті створюється ця тимчасова змінна щоразу, коли вона викликається.
Я найкраще здогадуюсь, чому це використовується, це те, що він обмежує кількість примірників для бару (буде лише один) і, таким чином, економить накладні витрати на управління пам'яттю.
Мої запитання:
- Чи правильне це припущення?
- Чи є назва цього шаблону?
- Чому це використовується?