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