Все языки программирования имеют общий способ создания программ или полноценных программных приложений, который включает создание артефактов, таких как переменные, функции, классы, структуры данных и т. д.
Каждый язык имеет свой собственный способ объявления и инициализации этих артефактов. Что касается функций 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.
Если вам понравился контент, то кидайте хлопки. Оставьте свой отзыв, если вы считаете, что что-то можно улучшить. Если вам интересно, то вот некоторые из моих статей, которые вы можете прочитать и поделиться ими: