Что выведет код Middle Области видимости и замыкания обновлено

var и function с одним именем

Вопрос

Что выведет код? По строке на каждый вывод.

function test() {
  console.log(typeof foo);
  var foo = 'строка';
  function foo() {}
  console.log(typeof foo);
}
test();

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: function, string. При входе в функцию регистрируются оба объявления.

Что выведет

function
string

Разбор

При входе в функцию регистрируются оба объявления. Объявление функции поднимается вместе с телом и имеет приоритет над var без значения, поэтому первая строка видит функцию: function. Затем выполняется присваивание foo = 'строка', а строка с function foo() {} при выполнении ничего не делает. Вторая строка: string.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.