#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:
Если вы внимательно посмотрите на ваши первые два случая, вы всегда объявляете переменную a
, а в JavaScript поднимаются только объявления.
При этом в вашей Case 3
переменной a
никогда не объявляется, следовательно, подъем здесь невозможен. При этом в области видимости нет переменной с таким именем a
, и, следовательно, ReferenceError
.
Если вы посмотрите на описание ReferenceError, оно гласит:
Объект ReferenceError представляет ошибку, когда ссылаются на несуществующую переменную.
Ответ №2:
Неявные глобальные значения не подразумевают var
инструкцию. Их подъем не выполняется.