JavaScriptУрок 12 из 16
Замыкания
Функция в JavaScript помнит переменные того места, где её создали, даже когда внешняя функция уже закончила работу. Это и есть замыкание — способ дать функции личную память.
Главное
- Внутренняя функция видит переменные внешней и сохраняет к ним доступ
- Каждый вызов внешней функции создаёт новую, отдельную память
- Снаружи до такой переменной не добраться — получаются приватные данные
- Фабрика функций: makeGreeter("Hello") возвращает готовую функцию приветствия
- На замыканиях построены счётчики, кэши, once и обработчики событий
Пример
function createCounter() { let count = 0; return () => { count += 1; return count; };} const next = createCounter();console.log(next(), next(), next()); const other = createCounter();console.log(other()); const makeGreeter = (greeting) => (name) => `${greeting}, ${name}!`;const hello = makeGreeter("Hello");console.log(hello("Max"));next помнит свой count и при каждом вызове увеличивает его. other создан отдельно, поэтому начал с 1. makeGreeter вернула функцию, которая запомнила слово Hello.
Задание
Как пользоваться редактором⌘ Enter или Ctrl Enter — запустить код, ⇧ ⌘ Enter — проверить задание.Tab и Shift Tab сдвигают строку или выделение; Esc, затем Tab — выйти из редактора.Проверка сравнивает то, что напечатала программа, с заданием; пробелы в конце строк не важны.После двух неудачных проверок можно открыть решение. Ваш код сохраняется в этом браузере.Допишите копилку: add(amount) прибавляет сумму к balance и возвращает новый баланс, total() возвращает balance. Затем напишите once(fn) — она возвращает функцию, которая запускает fn только в первый раз. Вывод: Mia: 20, Leo: 3 и From outside: undefined.
Вывод
Здесь появится то, что напечатает программа.