Ошибка ReferenceError: … is not defined
Ошибка значит: в коде использовано имя, которого движок не знает. В начале сообщения стоит само имя:
Uncaught ReferenceError: totl is not definedНайдите в коде строку, которую указывает консоль (номер строки справа от сообщения). Причина зависит от того, какое имя в сообщении.
Найдите свой случай
Имя из вашего кодаопечатка или переменная из другого блока
Опечатка или регистр
totl вместо total, Console вместо console, number("5") вместо Number("5"). Большие и маленькие буквы в именах различаются. Сравните написание с объявлением: поиск по файлу (Ctrl+F) быстро покажет, как имя написано в других местах.
Переменная объявлена в другом блоке
let и const видны только в своём блоке и функции. Снаружи их нет:
function makeGreeting() {
const greeting = "Привет";
return greeting;
}
makeGreeting();
try {
console.log(greeting);
} catch (err) {
console.log(err.name + ": " + err.message);
}ReferenceError: greeting is not definedЗначение из функции получают через return: const text = makeGreeting();. Если переменная нужна в нескольких функциях, объявите её снаружи, выше их.
Имя библиотеки ($, jQuery, Chart)скрипты подключены не в том порядке
$ is not defined, jQuery is not defined, Chart is not defined — код использует библиотеку, которая ещё не загружена. Библиотеку подключают раньше своего скрипта:
<script src="libs/chart.js" defer></script>
<script src="script.js" defer></script>Скрипты с defer выполняются по порядку тегов. С async порядок не гарантирован — для зависимых скриптов он не подходит. Если библиотека не загрузилась вовсе (неверный путь), в консоли выше будет ошибка 404.
document, window или alertкод для браузера запущен в Node.js
document is not defined, window is not defined, alert is not defined в терминале — эти объекты есть только в браузере. Код, который работает со страницей, запускают на странице, а не командой node. Подробнее — в уроке Первая программа: где запускать JavaScript.
requireв браузере и в модулях его нет
require is not definedв браузере —requireесть только в Node.js. В браузере файлы подключают тегами<script>или черезimportв модулях (<script type="module">).require is not defined in ES module scopeв Node.js — файл считается модулем: у него расширение.mjsили вpackage.jsonесть"type": "module". В модуле вместоrequireпишутimport:import fs from "node:fs";.
Не «чините» ошибку, объявляя переменную наугад (let total; в начале файла): ошибка пропадёт, но значение останется undefined, и проблема всплывёт в другом месте. Найдите, где значение должно было появиться.
Если ошибка Cannot access … before initialization
let и const нельзя трогать до строки объявления — ошибка будет другая, но похожая: Cannot access 'x' before initialization. Перенесите объявление выше. Подробно — в справке Чем отличаются var, let и const.