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;Рішення
- Перевірте написання та регістр.
- Оголосіть змінну та ініціалізуйте її перед використанням.
- Оголошуйте змінні, потрібні поза блоком, перед блоком.
- Враховуйте середовище: API браузера в Node або навпаки (
typeof window !== "undefined"). - Перевірте порядок скриптів та імпорти; у модулях правильно задайте
import/export. - З
"use strict"або модулями ES випадкові глобальні змінні виявляються рано; лінтер (ESLint, правилоno-undef) знаходить це просто в редакторі.
Див. також: Cannot read properties of undefined, TypeError