Замыкания🔒. Сложное - простыми словами

Представьте себе коробку📦. Внутри этой коробки находится переменная.

Замыкание🔒 — это ситуация, когда функция "помнит" переменные из своего лексического окружения (то есть, из того места в коде, где она была определена), даже после того, как это окружение перестало существовать💥.

Другими словами, функция "закрывает" в себе эти переменные.

Разберем на примерах: Простой счетчик

function createCounter() { let count = 0; // Переменная, "закрытая" в замыкании

return function() { count++; return count; }; }

let counter = createCounter(); console.log(counter()); // 1 console.log(counter()); // 2 console.log(counter()); // 3

Здесь createCounter — это функция, которая создает и возвращает другую функцию (анонимную). Внутренняя функция имеет доступ к переменной count, даже после того, как createCounter закончила свою работу. Каждый вызов возвращенной функции увеличивает count, демонстрируя, что эта переменная сохраняется внутри замыкания.

Итог: замыкания позволяют функциям "помнить" свое окружение, предоставляя мощный механизм для создания гибкого и функционального кода. Они являются основой для многих продвинутых паттернов в JavaScript, таких как карринг, частичное применение и создание приватных переменных.