Перейти до основного вмісту
Модуль 4 · Урок 4 із 416/32 у курсі~12 min
Модульні уроки (4/4)

Закриття та сфера дії

Закриття — це функція, яка «запам’ятовує» змінні області видимості, у якій вона була визначена, навіть після того, як цей обсяг закінчився. Це виглядає як магія, але це прямий наслідок правил області дії.

Ланцюжок сфери застосування

Функція може читати змінні, оголошені поза самою собою, проходячи по ланцюжку областей:

JS
const moltiplicatore = 10;

function moltiplicaPer10(n) {
  return n * moltiplicatore; // reads from the closure
}

moltiplicaPer10(3); // 30

Фабрика функцій

Найбільш типовий шаблон: функція, яка повертає іншу функцію, «налаштовану» за допомогою отримані параметри.

JS
function creaSaluto(prefisso) {
  return function (nome) {
    return `${prefisso}, ${nome}!`;
  };
}

const ciao = creaSaluto('Ciao');
const buongiorno = creaSaluto('Buongiorno');

ciao('Anna'); // 'Ciao, Anna!'
buongiorno('Marco'); // 'Buongiorno, Marco!'

Кожен виклик creaSaluto створює окрему область зі своїм prefisso.

Лічильник з приватним держ

Класичний приклад: закриття, яке утримує стійку, не відкриваючи її назовні.

JS
function creaContatore() {
  let n = 0;
  return function () {
    n++;
    return n;
  };
}

const c = creaContatore();
c(); // 1
c(); // 2
c(); // 3

const c2 = creaContatore();
c2(); // 1  ← isolated state!

n є приватним: ніхто поза межами закриття не може читати чи змінювати його.

Спробуйте

вправи#js.m4.l4.e1
Спроби: 0Завантаження…

Реалізуйте фабричний `makeCounter()`, який повертає функцію: кожен виклик функції повертає прогресивне ціле число, починаючи з 1. Різні лічильники мають бути незалежними.

Завантаження редактора…
Показати підказку

Оголошіть n за допомогою let всередині makeCounter, а потім поверніть функцію, яка виконує ++n.

Рішення доступне після 3 спроб

Повторна вправа

вправи#js.m4.l4.e2
Спроби: 0Завантаження…

Реалізуйте `makeAdderWith(base)`, яка повертає функцію: якщо задано число n, вона повертає base + n. Кожен суматор запам'ятовує свою базу.

Завантаження редактора…
Показати підказку

повертає функцію зі стрілкою, яка використовує основу із зовнішнього параметра.

Рішення доступне після 3 спроб