Объявление функции создает переменную с тем же именем в текущей области.
function a() {
function b() {
}
}
В вышеприведенном примере переменная b
создается в области действия a
.
Выражение функции создает переменную с тем же именем в собственной области видимости.
function a() {
(function b() {
})
}
В приведенном выше примере переменная b
создается в области действия b
, ноnot a
.
В вашем первом примере (выражение именованной функции ), f
не существует вне функции, поэтому это undefined
.
Во втором примере (также именованная функция express ) вы явно присваиваете функции a
(неявный глобал), чтобы она была определена.
Ни один изВ ваших примерах есть объявление функции, несмотря на заголовок вашего вопроса.Помещение ключевого слова function
в условие if ()
делает его таким же выражением, как и на RHS =
.