Подъем Javascript и объявление глобальной области видимости

#javascript

#javascript

Вопрос:

В javascript на этапе компиляции найдите и свяжите все объявления с их соответствующими областями.

СЛУЧАЙ 1

 a = 2;
console.log(a);
  

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

 var a;
a = 2;
console.log(a);
  

Результат: 2

СЛУЧАЙ 2

если объявление происходит ниже console.log()

   console.log(a); 
  var a = 2;
  

Здесь, в строке 1: компилятор проверит объявление a в своей области видимости, если не найдено, глобальная область видимости назначит одно и то же, и тот же код снова будет считаться таким же, как

    var a; 
   console.log(a);
   a = 2;
  

Вывод: не определено // поскольку при чтении интерпретатором консоли значение не присваивается

ПРИМЕР 3

  console.log(a); 
 a = 2;
  

Вывод: Ссылка

Почему это выдает ошибку ссылки, а не undefined?

Комментарии:

1. Поднимаются только объявления

Ответ №1:

Если вы внимательно посмотрите на ваши первые два случая, вы всегда объявляете переменную a , а в JavaScript поднимаются только объявления.

При этом в вашей Case 3 переменной a никогда не объявляется, следовательно, подъем здесь невозможен. При этом в области видимости нет переменной с таким именем a , и, следовательно, ReferenceError .

Если вы посмотрите на описание ReferenceError, оно гласит:

Объект ReferenceError представляет ошибку, когда ссылаются на несуществующую переменную.

Ответ №2:

Неявные глобальные значения не подразумевают var инструкцию. Их подъем не выполняется.