В ES5 нельзя было задать блочную область видимости.
if (true) {
var foo = 'bar';
}
console.log(foo); // bar
В ES6 такая возможность появилась, но не для всех, а только для новых переменных
if (true) {
var foo = 'bar';
let baz = 'biz';
const alpha = 'beta';
}
console.log(foo); // bar
console.log(baz); // ReferenceError: baz is not defined
console.log(alpha); // ReferenceError: alpha is not defined
По этому если вы присвоите функцию одной из переменных const/let то вы добьетесь того же эффекта:
if (true) {
const foo = () => {};
}
console.log(foo); // ReferenceError: foo is not defined
Функциональная область видимости существовала всегда
function foo () {
function bar() {}
}
console.log(bar); // ReferenceError: bar is not defined