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