Hoisting, TDZ и чистые функции

Что такое hoisting (всплытие)?

Процесс, при котором интерпретатор как будто «поднимает» объявления функций, переменных и классов в начало их области видимости до выполнения кода.

  • Функции всплывают вместе со своим телом — доступны и вызываемы до строки объявления.
  • var всплывает со значением по умолчанию undefined.
  • let, const, классы всплывают, но недоступны — у них нет инициализации по умолчанию.

Temporal Dead Zone (TDZ)

Период выполнения, когда переменные let/const уже всплыли, но ещё недоступны.

console.log(number); // ❌ ReferenceError — TDZ
let number = 10;
console.log(number); // 10

JavaScript «знает» о существовании number (объявление всплыло), но обращение к ней до инициализации бросает ошибку.


Pure vs Impure функции

Чтобы считаться чистой, функция должна:

  • быть предсказуемой — при одних и тех же входных данных возвращать один и тот же результат;
  • не иметь побочных эффектов (side effects).

Побочные эффекты включают (не ограничиваясь):

  • изменение глобальной переменной;
  • изменение аргумента;
  • HTTP-запросы;
  • манипуляции с DOM;
  • чтение/запись файлов.
// pure
const add = (a, b) => a + b;
 
// impure — меняет внешнее состояние
let total = 0;
const addToTotal = (n) => (total += n);

См. также