Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.
Создание замыкания без вложенной функции
Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Предложите реализацию замыкания, при этом не прибегая к использованию вложенных функций.
Ответ
Замыканию не обязательно нужна внешняя функция: лексическую область можно создать обычным блоком. Функция, объявленная внутри блока, сохранит доступ к его переменной после выхода из блока.
let increment;
{
let count = 0;
increment = () => ++count;
}
console.log(increment()); // 1
console.log(increment()); // 2
Здесь нет функции, вложенной в другую функцию: стрелка находится внутри блока. Переменная count недоступна снаружи напрямую, но сохранена лексическим окружением стрелки. Замыкание — связь функции с областью объявления, а не специальный синтаксис «функция возвращает функцию». Если запретить создание функций вообще, это уже не задача о реализации замыкания.