Я изучаю 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;
};
Сравнивая первую версию с нормальным изменением, первое, похоже, отличается тем, что:
- Он присваивает результат самоисполняемой функции.
- Он определяет локальную переменную внутри этой функции.
- Он возвращает фактическую функцию, содержащую логику, которая использует локальную переменную.
Таким образом, основное отличие состоит в том, что в первом варианте полоса назначается только один раз при инициализации, а вторая вариация создает эту временную переменную каждый раз, когда она вызывается.
Мое лучшее предположение о том, почему это используется, заключается в том, что оно ограничивает количество экземпляров для бара (там будет только один) и, таким образом, экономит накладные расходы на управление памятью.
Мои вопросы:
- Правильно ли это предположение?
- Есть ли имя для этого шаблона?
- Почему это используется?