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

Каждый язык имеет свой собственный способ объявления и инициализации этих артефактов. Что касается функций JavaScript, то есть два разных способа их реализации.

Обе реализации делают одно и то же — объявляют или реализуют функцию JavaScript. Итак, в чем причина существования двух разных способов написания функции?

JavaScript Info определяет основное различие, а именно время, когда функция создается и делается доступной движком JavaScript.

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

Объявление функции

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

function greet(){   
  alert("Hello");
}

greet(); // "Hello"

Выражение функции

Как следует из названия, здесь функция объявляется внутри выражения. В этом примере функция объявлена ​​внутри выражения присваивания.

Он распознается сигнатурой функции как: ключевое слово функции, круглые скобки, тело функции внутри фигурных скобок.

let greet = function(){
  alert("Hello");
};

greet();  // "Hello"

Доступность функции

Объявление функций позволяет функции быть доступной во всем потоке кода (файле или блоке кода, в котором она объявлена). Их можно вызывать даже до их строки объявления. Тогда как функциональные выражения доступны только после их выполнения.

Пример ниже демонстрирует разницу в использовании обоих синтаксисов.

pay();    // correct: can be called before line of declaration

function pay(){
  alert("paid");
}

pay();    // "paid"

greet();  // wrong: cannot call before initialization

let greet = function(){
  alert("Hello");
};

greet();  // "Hello"

Почему это так?

Причина, по которой это работает, заключается во внутреннем алгоритме JavaScript Engine, как объясняется в JavaScript Info:

Функциональное выражение создается, когда до него доходит выполнение, и его можно использовать только с этого момента.

Объявление функции может быть вызвано раньше, чем оно определено.

Это связано с внутренними алгоритмами. Когда JavaScript готовится к запуску сценария, он сначала ищет в нем глобальные объявления функций и создает функции. Мы можем думать об этом как об «этапе инициализации».

И после того, как все Объявления функций обработаны, выполняется код. Так что у него есть доступ к этим функциям.

Итак, отличием реализации является время выполнения функции, которое определяет или ограничивает область ее доступности.

Подведение итогов

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

Хотите прочитать подробнее?

Я обобщил концепцию для простоты понимания и позаботился о том, чтобы ничего не пропустить. Но, если вы хотите прочитать подробнее, посетите JavaScript Info.

Если вам понравился контент, то кидайте хлопки. Оставьте свой отзыв, если вы считаете, что что-то можно улучшить. Если вам интересно, то вот некоторые из моих статей, которые вы можете прочитать и поделиться ими: