Я читаю книгу «Вы не знаете JS», и я прочитал эту часть:
Здесь автор имеет в виду, что эти функции foo будут подняты на глобальном уровне, поскольку условные операторы не имеют возможности создавать свою собственную область видимости в JS. Таким образом, ожидаемое поведение состоит в том, что я напечатаю b.
Однако результатом является ошибка: «Uncaught TypeError: foo не является функцией в: 1: 1»
Однако, если я сделаю это:
var a = true;
if (a) {
function foo() { console.log( "a" ); }
}
else {
function foo() { console.log( "b" ); }
}
а затем вызвать функцию я получу результат "а"?
foo
не объявляется там, где он используется, а объявление функций в условных блоках — нет.) - person T.J. Crowder   schedule 04.06.2018