EMZETT.
Увійти

ReferenceError (JavaScript)

Коротко: JavaScript не знає використане ім’я, бо воно не оголошене, написане з помилкою або використане поза своєю областю видимості.

Докладніше: Типові повідомлення: ReferenceError: x is not defined і ReferenceError: Cannot access 'x' before initialization. Мова про змінні та область видимості.

Подробиці

Можливі причини

  • Друкарська помилка в імені (count замість cnout).
  • Змінну ніколи не було оголошено через let, const або var.
  • Область видимості: змінна, оголошена через let/const у блоці, поза ним не існує.
  • Тимчасова мертва зона: let/const використані до оголошення (Cannot access 'x' before initialization).
  • Об’єкти, що використовуються в браузері (window, document), не існують у Node.js, і навпаки (require, process).
  • Скрипт завантажується раніше скрипта, що визначає ім’я, або відсутній імпорт.

Приклад

if (true) {
  let sum = 5;
}
console.log(sum);     // ReferenceError: sum is not defined
console.log(a);       // ReferenceError: Cannot access 'a' before initialization
let a = 1;

Рішення

  1. Перевірте написання та регістр.
  2. Оголосіть змінну та ініціалізуйте її перед використанням.
  3. Оголошуйте змінні, потрібні поза блоком, перед блоком.
  4. Враховуйте середовище: API браузера в Node або навпаки (typeof window !== "undefined").
  5. Перевірте порядок скриптів та імпорти; у модулях правильно задайте import/export.
  6. З "use strict" або модулями ES випадкові глобальні змінні виявляються рано; лінтер (ESLint, правило no-undef) знаходить це просто в редакторі.

Див. також: Cannot read properties of undefined, TypeError