Мы здесь! Теперь давайте поговорим об основных различиях между объявлением функции и выражением функции.

Прежде чем углубиться в это, давайте разберемся, что такое объявление функции и выражение функции.

Объявление функции: если мы пишем функцию в коде JavaScript с ключевым словом `function` в префиксе, это называется объявлением функции.

Выражение функции: если мы назначаем любую анонимную функцию любой переменной (пусть var const), это называется выражением функции.

Помимо синтаксиса, есть ключевое отличие, которое бросается в глаза, но, тем не менее, мы можем о нем не знать. Да это Hoisting

Поднятие для объявлений и выражений работает по-разному. Это происходит из-за его среды выполнения JavaScript.

Внутри контекста выполнения среды выполнения JavaScript. Он состоит из двух этапов
1. Этап создания
2. Этап выполнения

Этап создания меняет правила игры. В то время как в фазе создания движок javaScript поднимает главным образом на двух вещах, которые
1. Переменные, объявленные с ключевым словом `var`.
2. Объявления функций

Но тут этот вопрос мелькает перед нашим сознанием. Мы можем написать функциональное выражение с ключевым словом var, и оно будет поднято. Какая разница?

Ключевое отличие здесь в том. Если мы используем объявление функции, движок javaScript поднимает функцию и присваивает ей всю копию функции в качестве начального значения. — И если мы используем функциональное выражение, движок javaScript обрабатывает его так же, как любую переменную, вместо того, чтобы присваивать всю копию функции, он инициализирует ее значением undefined.

давайте разберемся, взглянув на этот простой пример кода

Чтобы показать, что это происходит внутри браузера, я поместил отладчик в первую строку и посмотрел, как работает подъем в обоих случаях.

В заключение, для объявления функции он поднимается с копией функции, а для выражения он поднимается с неопределенным значением.

PS: Есть больше различий между объявлениями функций и функциональными выражениями. Вы можете узнать больше на mdn и js-info