#javascript
#javascript
Вопрос:
Почему результат следующего кода равен 1, а не 10? Почему функция bar() не изменяет значение, даже несмотря на то, что есть оператор return.
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {}
}
bar();
alert(foo);
Ответ №1:
Это потому, что function
определения поднимаются на вершину их области видимости, поэтому назначение foo внутри bar()
фактически ссылается на локальную функцию, которая имеет пустое тело.
Вы можете прочитать больше об этом здесь
Ответ №2:
Это потому, что при компиляции объявление foo
функции внутри bar
перемещается в верхнюю часть bar
. Вот так
var foo = 1;
function bar() {
function foo() {}
foo = 10;
return;
}
bar();
alert(foo);
Прочитайте о подъеме в JS.
И здесь в разделе «подъем переменной»