В ES5 FunctionDeclaration обязан быть либо вверху глобали, либо функции, т.е.
function foo() {
'use strict';
if (true) {
function bar() { // Error
}
}
}
В ES6 обсуждают концепцию локальных деклараций, а пока юзаю let + FunctionExpression если нужно такое.