Я бы ожидать, что это (уменьшенная ради примера) функции для запуска без сучка, но он не в счет fn2 is not defined
:Функция подъема и оператор возврата
void function(){
var var1 = fn1();
var var2 = fn2();
function fn1(){};
return function fn2(){};
}();
Как оператор возврата исключает функциональное выражение для fn2
от подъема?