Узнайте о разнице между объявлениями функций и выражениями функций в JavaScript.

В программировании функция — это многократно используемый блок кода, который объединяет последовательность операторов для выполнения конкретной задачи, которую ему дают. Есть два способа написать функцию в JavaScript.
Объявление функции:
Объявление функции — это функция, объявленная как отдельный оператор, когда вы определяете ключевое слово «функция», за которым следует имя, которое вы даете функции.

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

Объявления функций и функциональные выражения определяют блок кода, но большая разница заключается в порядке их выполнения.
При вызове функции `greeting` в этом примере все работает нормально:

Однако в качестве функционального выражения это вызовет ошибку ссылки, говорящую: "приветствие не определено"

Хотя мы объявили «приветствие», это говорит нам, что «приветствия» не существует. Это связано с термином, известным как подъем.
Подъем:
В JavaScript код выполняется сверху вниз. Поднятие относится к доступности функций и переменных «наверху» вашего кода.
Объявления функций поднимаются вверх перед выполнением любого кода. Это означает, что ваш интерпретатор всегда знает о ваших объявлениях функций до того, как они будут вызваны.
Ваш интерпретатор принимает этот код:

И читается так:

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

Причина возникновения этой ошибки в том, что функциональные выражения не поднимаются; вы вызываете функцию еще до того, как интерпретатор сможет прочитать выражение функции; следовательно, он не существует в момент выполнения.
Чтобы заставить код работать, просто поменяйте порядок кода:

Что следует использовать?
В конечном счете, все зависит от того, что вы предпочитаете. Они оба выполнят свою работу, но есть некоторые преимущества, когда дело доходит до использования или или.
Как упоминалось ранее, объявления функций всегда осведомлены о функциях, а выражения функций — нет. При правильном написании использование функциональных выражений придает вашему коду красивую структуру и гарантирует, что вы не вызовете функцию до того, как она будет определена.
Также полезно знать, что функциональные выражения вызываются, чтобы не загрязнять глобальную область видимости. Глобальная область — это самая внешняя область, и она доступна из любой внутренней области. Поскольку объявления функций вызываются по имени в любое время и в любом месте, функция добавляется в глобальное пространство имен, поэтому ваша программа знает о многих различных функциях, но после использования функциональных выражений они немедленно забываются, поэтому она не загрязняет ваш глобальный масштаб.
С другой стороны, если вам нужно вызвать функцию до ее объявления, используйте объявления функций. Объявления функций также хороши, когда вы хотите создать функцию в глобальной области видимости и сделать ее доступной во всем коде.
Обзор:
- Функции — это блоки кода, предназначенные для выполнения определенной задачи.
- Объявления функций поднимаются, что означает, что они читаются до выполнения блока кода.
- Функциональные выражения не поднимаются, поэтому они будут выполнены только после того, как интерпретатор полностью прочитает функцию.
- Используйте объявления функций, если вы хотите создать функцию в глобальной области видимости и сделать ее доступной во всем коде.
- Используйте функциональные выражения, чтобы ограничить доступность функции, не засорять глобальную область видимости и добавлять структуру в свой код.