В JavaScript замыкание — это функция, которая имеет доступ к переменным в своей лексической области видимости, даже если функция выполняется за пределами своей исходной области видимости. Это позволяет функции поддерживать доступ к нужным ей переменным, даже если код, определяющий функцию, уже выполнен.
Вот простой пример того, как замыкание работает в JavaScript:
function makeCounter() { // Define a variable to hold the current count let count = 0; // Return a function that increments the count and logs it to the console return function() { count++; console.log(count); }; } // Create a counter function const counter = makeCounter(); // Call the counter function three times counter(); // Output: 1 counter(); // Output: 2 counter(); // Output: 3
В этом примере функция makeCounter
определяет переменную count
и возвращает функцию, которая увеличивает переменную count
и записывает ее в консоль. Поскольку возвращаемая функция определена внутри функции makeCounter
, она имеет доступ к переменной count
даже после выполнения функции makeCounter
.
Когда вызывается функция makeCounter
, она возвращает внутреннюю функцию, которая хранится в переменной counter
. Затем эта внутренняя функция вызывается три раза, увеличивая переменную count
и каждый раз записывая ее значение.
Таким образом, замыкание позволяет внутренней функции сохранять доступ к переменной count
даже после завершения выполнения функции makeCounter
. Замыкания обычно используются в JavaScript для создания переменных, к которым могут обращаться и изменять несколько функций, не делая эти переменные глобальными.