это связано с двухпроходной компиляцией. Видимо, изнури if declaration не компилируется при первом проходе. Вообще, function declaration таит в себе множество сюрпризов, лучше не использовать его вообще.
Nazaki, FD может располагаться в коде только в двух местах: в глобальном контексте или внутри другой функции, и обязательно должна быть записана в виде: