Замыкания в JavaScript — это когда функция «запоминает» переменную из того места, где она была создана, даже после завершения работы внешней области видимости. функция внешняя() { пусть счет = 0; // переменная во внешней области видимости функция внутренняя() { ...
Замыкания в JavaScript — это когда функция «запоминает» переменную из того места, где она была создана, даже после завершения работы внешней области видимости.
функция внешняя() {
пусть счет = 0; // переменная во внешней области видимости
функция внутренняя() {
считать++;
console.log(счет);
}
вернуться внутрь;
}
константный счетчик = внешний ();
прилавок(); // 1
счетчик(); // 2
счетчик(); // 3
Вот что происходит:
external() запускается, создает счетчик переменных и определяет внутренний().
external() возвращает внутренний, и его выполнение завершается.
Обычно вы ожидаете, что count исчезнет после возврата внешнего объекта — его область действия завершена.
Но у внутреннего по-прежнему есть доступ к счетчику, поскольку он «закрыл» эту переменную при ее создании.
Каждый вызов counter() не сбрасывает счетчик до 0 — он продолжает увеличивать одну и ту же переменную счетчика, спрятанную внутри замыкания.
Почему это происходит
Функции JavaScript сохраняют ссылку на лексическую область видимости (область, в которой они были определены в текстовом виде) не только при создании, но и на протяжении всей своей жизни. Таким образом, внутренний элемент несет обратную ссылку на переменную среду внешнего, куда бы он ни направлялся.