Function declaration (объявление функции) поднимается интерпретатором (hoisting), то есть может быть вызвана до своего определения в коде. Создается в момент парсинга скрипта. Имеет имя.
javascript
Function expression (функциональное выражение) не поднимается. Выполняется как часть выражения. Может быть анонимным или иметь имя (именованное функциональное выражение). Именованное Functional expression позволяет обращаться к функции рекурсивно внутри нее самой и видеть имя в отладчике.
javascript
Основные отличия:
| Особенность | Function Declaration | Function Expression |
|---|---|---|
| Hoisting | Да | Нет |
| Время создания | При парсинге скрипта | В момент выполнения |
| Наличие имени | Обязательно | Может быть опционально |
| Использование в условиях | Не рекомендуется | Рекомендуется |
Пример использования в условиях:
javascript