Ситуация: нам нужно быстро дописать код, но не хватает одной функции. Мы не знаем, как её быстро реализовать, поэтому идём за ней в интернет — и находим:
// складываем два числа, которые на самом деле — строки; возвращаем строку
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, а не в браузере.