На данный вопрос уже ответили:
Почему объявление функции поднимается в начало блока, а ее идентификатор доступен аж в начале сценария с не определенным значением (undefined) ?
<script>
console.log(foo); // undefined
if(true) {
console.log(foo()); // "hello"
function foo() {
return 'hello';
}
}
console.log(foo()); // "hello"
</script>
Начиная с es6, функции можно объявлять внутри блоков if. В этом случае область их видимости будет заканчиваться областью if. Во избежания подобных проблем с undefined нужно использовать директиву 'use strict', тогда при обращении к необъявленной функции foo будет ошибка. Без использования этой директивы, результат будет разница в зависимости от внутренней реализации стандарта в том или ином браузере.
'use strict'
console.log(foo); // undefined
if(true) {
console.log(foo()); // "hello"
function foo() {
return 'hello';
}
}
console.log(foo()); // "hello"
https://stackoverflow.com/questions/10069204/function-declarations-inside-if-else-statements
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости