Создание замыкания без вложенной функции

Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.

Короткий ответ

Что ответить на собеседовании

Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.

Подробный разбор

Ответ с пояснениями

Условие

Предложите реализацию замыкания, при этом не прибегая к использованию вложенных функций.

Ответ

Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.

let increment;
{
  let count = 0;
  increment = () => ++count;
}
console.log(increment()); // 1
console.log(increment()); // 2

Здесь нет функции, вложенной в другую функцию: стрелка находится внутри блока. Переменная count недоступна снаружи напрямую, но сохранена лексическим окружением стрелки. Замыкание — связь функции с областью объявления, а не специальный синтаксис «функция возвращает функцию». Если запретить создание функций вообще, это уже не задача о реализации замыкания.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее