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.

Вывод

Здесь появится то, что напечатает программа.