Что такое функция замыкания в JavaScript
-
Функция замыкания (closure) в JavaScript — это одна из ключевых концепций языка, которая позволяет функции запоминать и получать доступ к переменным из внешней области видимости, даже после того, как внешняя функция завершила своё выполнение.
Простыми словами: Замыкание — это функция внутри другой функции, которая "запоминает" окружение, в котором была создана, и может использовать переменные из этого окружения.
В JavaScript действует лексическое окружение — функция "знает", где она была определена, и имеет доступ к переменным из родительской области видимости.
Пример замыкания:
function outerFunction(x) { return function innerFunction(y) { return x + y; }; } const add5 = outerFunction(5); // x = 5 запоминается console.log(add5(3)); // 8 → innerFunction всё ещё "помнит" x = 5
Что происходит:
outerFunction(5)
вызывается,x = 5
.- Возвращается
innerFunction
, которая используетx
. - Даже после завершения
outerFunction
,innerFunction
всё ещё имеет доступ кx
. - Это и есть замыкание —
innerFunction
"замкнула" в себе переменнуюx
.
Ещё один пример — счётчик:
function createCounter() { let count = 0; return function() { count++; console.log(count); }; } const counter = createCounter(); counter(); // 1 counter(); // 2 counter(); // 3
- Переменная
count
находится внутриcreateCounter
, но возвращаемая функция может к ней обращаться. - Каждый вызов увеличивает
count
, и значение сохраняется между вызовами, потому что замыкание "удерживает" переменную.
Важные особенности замыканий:
- Замыкания позволяют инкапсулировать данные (как приватные переменные).
- Они используются для создания фабрик функций, модулей, обработчиков событий и т.д.
- Замыкания могут привести к утечкам памяти, если держат ссылки на большие объекты, которые больше не нужны.
Где используются замыкания?
- В модульном паттерне (приватные переменные и методы).
- При работе с колбэками и асинхронным кодом (например, в setTimeout).
- В функциях высшего порядка (map, filter, reduce).
- При создании декораторов и каррирования.
Замыкание — это функция, которая "запоминает" своё лексическое окружение, даже когда вызывается вне его.
-
-
-
-
-
Все типы данных в javascript
Перенесена JavaScript -
Объяснение метода matchAll()
Перенесена JavaScript -
Зачем нужны динамические импорты
Перенесена JavaScript -
© 2025 eduity.ru, Inc. Все права защищены.