Sobes.tech
Назад к вопросам
Junior
208
questionbank

Что такое необъявленные переменные (undeclared переменные)?

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Необъявленная переменная — это переменная, к которой обращаются без предварительного объявления через var, let или const. В JavaScript в обычном режиме такое обращение может привести к неявному созданию глобальной переменной, а в strict mode — к ошибке. Важно понимать разницу между необъявленной, неинициализированной и невидимой из области видимости переменной.

Определение:

Необъявленная переменная — это идентификатор, который используется в коде, но не был создан через объявление в текущей или внешней области видимости.
Если попытаться прочитать такую переменную, обычно возникает ReferenceError. Если же присвоить значение необъявленной переменной в нестрогом режиме JavaScript, она может стать свойством глобального объекта, что считается плохой практикой.
Это отличается от undefined: там переменная объявлена, но еще не получила значение.

Пример использования:

function demo() {
  x = 10; // x не объявлена через let/const/var
  console.log(x);
}

demo();
console.log(window.x); // в браузере может стать доступной как глобальное свойство
"use strict";

function demo() {
  x = 10; // ReferenceError: x is not defined
}
demo();

Пояснение кода:

Код нужен, чтобы показать поведение в двух режимах.

В первом примере:

  1. Внутри функции выполняется присваивание x = 10.
  2. Переменная x заранее не объявлена.
  3. В нестрогом режиме JavaScript может создать ее как глобальную.
  4. Это опасно, потому что такое поведение легко пропустить при ревью и получить баги из-за загрязнения глобальной области.

Во втором примере:

  1. Включается "use strict".
  2. Тот же код пытается присвоить значение необъявленной переменной.
  3. JavaScript сразу выбрасывает ReferenceError.
  4. Это помогает находить ошибки раньше и делает поведение кода предсказуемее.

Ключевые моменты:

  • Необъявленная переменная — это переменная, которая используется без var, let или const.
  • Чтение такой переменной обычно приводит к ReferenceError.
  • В нестрогом режиме присваивание необъявленной переменной может создать глобальную переменную.
  • В strict mode такое присваивание вызывает ошибку.
  • Это не то же самое, что undefined: undefined означает, что переменная объявлена, но значение не задано.
  • На практике необъявленных переменных нужно избегать, чтобы не создавать скрытые баги и глобальное состояние.