Что означает ошибка ReferenceError: Can't find variable

Что означает ошибка ReferenceError: Can't find variable

Ошибка в JavaScript: что она значит и что делать

Ситуация: нам нужно быстро дописать код, но не хватает одной функции. Мы не знаем, как её быстро реализовать, поэтому идём за ней в интернет — и находим:

// складываем два числа, которые на самом деле — строки; возвращаем строку
function plus(a,b) {
// тут будет результат
    var result = '';
    // переводим строки в числа
    x = parseInt(a);
    y = parseInt(b);
    // получаем результат
    result += x + y;
    // и возвращаем ответ в виде строки
    return(String(result));
}

console.log(plus(x,y));

Внешне вроде всё хорошо, но при запуске компьютер выдаёт ошибку:

❌ReferenceError: Can't find variable: x

Откуда ошибка, ведь все переменные у нас есть?

Что это значит: JavaScript встретил переменную, которую ему сказали использовать, но он не знает, где её брать. В нашем случае это происходит в последней строке: console.log(plus(x,y)); — мы сказали «выведи в консоль результат сложения X и Y», но не сказали, что это за икс и игрек. 

Возможно, автор исходного кода имел в виду, что у вас где-то ранее эти переменные определяются; или что вы будете использовать последнюю строку для отладки на тестовых данных. В любом случае он не предусмотрел, что эти переменные у вас могут быть не определены.

Что делать с ошибкой ReferenceError: Can't find variable

Чтобы исправить ошибку, нужно определить переменную до того, как вы её начн`те использовать. Например: 

let x = '11';
let y = '12';
console.log(plus(x,y));

 Если хотите, можно спросить значение у пользователя (коряво, но мы так иногда делаем):

let x = prompt("Введите первое число");
let y = prompt("Введите второе число");
console.log(plus(x,y));

Можно получить значение элементов веб-страницы, можно запросить их с сервера через асинхронный запрос. Это уже зависит от того, какая у вас страница. 

А ещё можно просто не использовать переменные, пока они не понадобятся. По сути, в нашем коде выше не было никакой необходимости выводить сумму чисел сразу после определения функции. Можно убрать последнюю строку с console.log() и жить спокойно. 

Где ещё

Иногда такая ошибка возникает при использовании специальных библиотечных функций в браузере или без предварительного импорта. Например, команда const axios = require("axios"); при запуске в браузере тоже выдаст ошибку, потому что эта команда предполагает запуск в среде Node.js, а не в браузере.

Текст:

Михаил Полянин

Редактор:

Максим Ильяхов

Художник:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Кирилл Климентьев

Соцсети:

Виталий Вебер

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Что означает ошибка TypeError: string indices must be integers
Что означает ошибка TypeError: string indices must be integers

Ошибка на внимательность из мира строк в Python

easy
Подключаем к сайту орфокорректор. Орфонейрокорректор!

Пишите как угодно — нейронка никому не расскажет.

hard
Красивый цветной текст в CSS: как это сделать
Красивый цветной текст в CSS: как это сделать

Можно раскрасить хоть по диагонали

easy
Задачка с собеседования: как перевести число в римскую систему счисления и обратно
Задачка с собеседования: как перевести число в римскую систему счисления и обратно

Простая задача с приятным решением

easy
Телеграм-бот для учёбы

Собираем за 10 минут.

medium
Сделай сам: менеджер шаблонных ответов на любые письма
Сделай сам: менеджер шаблонных ответов на любые письма

Отправляем текст в буфер обмена одним кликом.

easy
Делаем сами: адаптивный сайт

С котиками!

medium
Задача про вёрстку баннера
Задача про вёрстку баннера

Для тех, кто любит конкурсы разработчиков.

hard
Как добавить строку поиска на сайт
Как добавить строку поиска на сайт

«Будем искать»

easy
Пишем собственный лапшесниматель
Пишем собственный лапшесниматель

Инструмент для защиты ума от пропаганды, контрпропаганды, инфобизнеса и лжепсихологов.

easy
easy