Здравствуйте, недавно проходил интервью на позицию Junior Frontend Developer и интервьюер спросил меня про замыкания. Я ему ответил, что это функция которая запоминает лексическое окружение, в котором она была создана и т.д. Для примера сказал, что для создания замыкания нужно из функции вернуть функцию, в которой используются локальные переменные функции родителя. Потом он спросил, что обязательно ли для замыкания возвращать функцию или достаточно лишь {} самой функции. Я подумал в голове и сказал, что нужно возвращать функцию, но он сказал, что достаточно лишь {} и возвращение функции - это частый случай применения замыканий на практике. Весь интернет перерыл, но все примеры именно с возвратом функции. Можете объяснить, возможно я чего-то не понимаю?
Все функции в JavaScript это замыкания, то есть всегда, когда создается функция — всегда создается замыкание, хоть и зачастую оно пустое, так как функции обычно из объявления контекста как правило ничего не используют. Но нужно понимать разницу между созданием замыкания и созданием нового scope-объекта: замыкание (функция + ссылка на текущую цепочку scope-объектов) создается при определении функции, но новый scope-объект создается (и используется для модификации цепочки scope-объектов замыкания) при каждом вызове функции.