Что создает функцию в функции?

#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.
И здесь в разделе «подъем переменной»