English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Переменные JavaScript могут принадлежатьЛокальнаяОбласть видимости илиГлобальнаяОбласть видимости.
Можно использоватьКлوزурУстановить глобальную переменную в локальную (частную).
Предположим, что мы хотим использовать переменную для подсчета чего-то и хотим, чтобы этот счетчик был доступен для всех функций.
Мы можем использовать глобальную переменную и функцию для увеличения счетчика:
// Инициализация счетчика var counter = 0; // Функция для увеличения счетчика function increment() { counter++; } // Вызов increment() 3 раза increment(); increment(); increment(); document.getElementById("output").innerHTML = `Счетчик: ${counter};`,Проверьте, посмотрите < / >
Указанное решение имеет одну проблему: любое код на странице может изменить счетчик, не вызывая increment().
Внутренние функции JavaScript могут решить эту проблему.
JavaScript поддерживает вложенные функции. Вложенные функции могут доступ к диапазону上方.
В этом примере внутренняя функция может доступ к переменной счетчика внешней функции:
function outer() { var counter = 0; function inner() { counter++; } return counter; }Проверьте, посмотрите < / >
Накладные функции могут решить предыдущую проблему, если мы можем доступ к функции inner() извне.
Нам нужно найти способ, чтобы counter = 0 выполнялся только один раз, и это именно то, о чем пойдет речь в следующем разделе - клозура.
Клозуры - это комбинация функции и лексической среды, в которой она была определена.
Клозуры могут доступ к переменным из области另一个 функции. Это достигается созданием функции внутри функции. Конечно, внешняя функция не может доступ к внутреннему области.
var increment = (function() { var counter = 0; function inner() { return ++counter; } return inner; })();Проверьте, посмотрите < / >
Значение, возвращаемое функцией self-исполнения, используется для инкрементации переменной.
Функция self-исполнения выполняется только один раз. Она устанавливает счетчик в ноль и возвращает функциональное выражение.
Клозуры могут доступ к области父 функции, даже если она уже закрыта.