Hoisting, TDZ и чистые функции
Что такое hoisting (всплытие)?
Процесс, при котором интерпретатор как будто «поднимает» объявления функций, переменных и классов в начало их области видимости до выполнения кода.
- Функции всплывают вместе со своим телом — доступны и вызываемы до строки объявления.
varвсплывает со значением по умолчаниюundefined.let,const, классы всплывают, но недоступны — у них нет инициализации по умолчанию.
Temporal Dead Zone (TDZ)
Период выполнения, когда переменные let/const уже всплыли, но ещё недоступны.
console.log(number); // ❌ ReferenceError — TDZ
let number = 10;
console.log(number); // 10JavaScript «знает» о существовании number (объявление всплыло), но обращение к ней до инициализации бросает ошибку.
Pure vs Impure функции
Чтобы считаться чистой, функция должна:
- быть предсказуемой — при одних и тех же входных данных возвращать один и тот же результат;
- не иметь побочных эффектов (side effects).
Побочные эффекты включают (не ограничиваясь):
- изменение глобальной переменной;
- изменение аргумента;
- HTTP-запросы;
- манипуляции с DOM;
- чтение/запись файлов.
// pure
const add = (a, b) => a + b;
// impure — меняет внешнее состояние
let total = 0;
const addToTotal = (n) => (total += n);