Проверяет понимание различий между объявлением функции и функциональным выражением, что важно для чтения чужого кода и понимания hoisting.
В JavaScript функции можно создавать двумя основными способами: через Function Declaration и через Function Expression. Разница не только в синтаксисе, но и в том, как движок обрабатывает код до его выполнения.
Это классическое объявление функции с именем:
function greet(name) {
return 'Hello, ' + name;
}
console.log(greet('Anna')); // Hello, AnnaТакая функция полностью поднимается (hoisting) в начало своей области видимости. Это значит, что её можно вызвать даже до строки объявления:
console.log(greet('Bob')); // Hello, Bob
function greet(name) {
return 'Hello, ' + name;
}Здесь функция создаётся как часть выражения и обычно присваивается переменной:
const greet = function(name) {
return 'Hello, ' + name;
};
console.log(greet('Anna')); // Hello, AnnaПоднимается только переменная greet, а не сама функция. Для var переменная будет undefined до присваивания, для let/const — temporal dead zone. Поэтому вызов до объявления приведёт к ошибке:
console.log(greet('Bob')); // TypeError: greet is not a function
const greet = function(name) {
return 'Hello, ' + name;
};Итог: используйте Function Declaration для основных именованных функций, которые должны быть доступны во всей области видимости, а Function Expression — когда функция нужна как значение, колбэк или должна создаваться условно.