Я изучаю Javascript, используя Объектно-ориентированный JavaScript от Stoyan Stefanov
Он предлагает пример сравнения глобальной и локальной областей:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
В этом примере я ожидал, что первое предупреждение будет "123", а второе предупреждение - "1". Вот, Стоян говорит:
Вы можете ожидать, что первое предупреждение() отобразит 123 (значение глобальная переменная a), а вторая отображает 1 (локальный a). Это не тот случай. В первом предупреждении появится "undefined". Это потому что внутри функции локальная область важнее, чем глобальный охват. Таким образом, локальная переменная перезаписывает любую глобальную переменную с одно и то же имя. Во время первого предупреждения() a еще не определено (следовательно, значение undefined), но оно все еще существует в локальном пространстве.
Объяснение мне было непонятно, как локальная переменная может переписать глобальную переменную в первом предупреждении? Любые другие/разные объяснения будут оценены.