Модуль 9 · Урок 33
Function contracts, scope і closures
Функція — це перевірюваний контракт: які values вона приймає, що повертає і як поводиться з invalid input. Lexical scope визначається місцем написання коду, а closure дозволяє function зберегти доступ до цього environment без global state.
Контракт до реалізації
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 без міфів
let/const обмежені braces.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.
Офіційні джерела
Закріпіть матеріал уроку
Три сценарні питання. Для зарахування уроку потрібно дати щонайменше дві правильні відповіді.