Ошибка глобальной ссылки Javascript [дубликат]
На этот вопрос уже есть ответ здесь:
- ReferenceError и глобальный объект 3 ответа
Я получил этот вопрос в интервью, и мне любопытно, почему эти два вывода разные вещи:
(function() {
console.log(bar);
console.log(baz);
foo();
function foo() {
console.log('aloha');
}
var bar = 2;
baz = 3;
})();
Ouputs:
undefined
Uncaught ReferenceError: baz is not defined
Тогда как:
(function() {
console.log(bar);
console.log(window.baz);
foo();
function foo() {
console.log('aloha');
}
var bar = 2;
baz = 3;
})();
Выходы:
undefined
undefined
'aloha'
В чем разница в том, что baz
и window.baz
ссылаются? Я думал, что глобалы автоматически прикреплялись к окну?
3 ответа:
A ReferenceError указывает, что обнаружено недопустимое значение ссылки (ECMA 5 15.11.6.3)
На практике это означает, что при попытке JavaScript получить значение неразрешимой ошибки будет брошена ссылка ссылка. (Есть и другие случаи, когда ReferenceError будет бросается, особенно при работе в строгом режиме ECMA 5. Если вы заинтересованные проверяют список чтения в конце этой статьи)
Для дальнейшего чтения взгляните здесь .