Модуль 9 · Урок 33

Function contracts, scope і closures

Функція — це перевірюваний контракт: які values вона приймає, що повертає і як поводиться з invalid input. Lexical scope визначається місцем написання коду, а closure дозволяє function зберегти доступ до цього environment без global state.

Parameters / returnGuard clausesLexical scopeClosure

Контракт до реалізації

function createMinimumPagesFilter(minimum) {
  const safeMinimum = Number.isFinite(minimum) ? minimum : 0;
  return function hasEnoughPages(book) {
    return book.pages >= safeMinimum;
  };
}

Contract фіксує input, output і failure policy. Guard clause завершує invalid branch рано. Default parameter спрацьовує для undefined, але не перетворює invalid domain value на valid. Function declaration hoisted і має власні this/arguments; arrow успадковує lexical this і тут доречний лише для callback без власного receiver.

Scope і closure без міфів

GlobalНайширша видимість; мінімізуйте shared mutable state.
FunctionParameters і local bindings належать invocation.
Blocklet/const обмежені braces.
ClosureFunction зберігає доступ до lexical environment.

Closure не «копіює значення назавжди»: він працює з bindings відповідного environment. Передавайте dependencies явно; pure-ish function з однаковими inputs повертає однаковий output і не змінює зовнішній state.

Практика

Заповніть function-contract register і scope/closure trace. Перевірте normal, undefined, invalid і boundary inputs та зафіксуйте return без Console side effect усередині core.

Офіційні джерела

Практична перевірка · урок 33 з 60

Закріпіть матеріал уроку

Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.

1. Що має описувати function contract?
2. Що робить return?
3. Коли default parameter застосовується?