Function Expression или функциональное выражение в JavaScript - это один из способов записи функции. В этом случае ключевое слово function
используется для определения функции внутри выражения.
let varName = function(param1, param2, param3) {
alert('Быть JavaScript разработчиком это интересно!');
};
let varName
- для начала мы объявляем переменную куда будет записана функция.
function
- ключевое слово, обозначающее функцию.
param1
- параметры функции (не более 255).
{ }
- в фигурных скобках - тело функции.
Более популярным синтаксисом при написании функции является Function Declaration или объявление функции - в этом случае программа будет выглядеть так.
function fancName(param1, param2, param3) {
alert('Быть JavaScript разработчиком это интересно!');
}
Как в первом, так и во втором случае происходит одно и то же - мы говорим интерпретатору объявить переменную, далее создать функцию и сохранить ее в varName
и funcName
соответственно. Для большей наглядности можно вывести весь код функции в console или через alert()
.
let showFuncCode = function() {
return 'Автором языка программирования JavaScript является Брендан Эйх';
};
alert (showFuncCode); // showFuncCode прописываем без вызова (круглых скобок)
let newShowFuncCode = showFuncCode;
console.log (newShowFuncCode());
Другими словами функции в JavaScript это значения с дополнительным функционалом (вызовом) и мы можем, как объявлять их, так и копировать в другие переменные и уже их вызывать. Если добавить к showFuncCode
круглые скобки ()
, тогда в переменную newShowFuncCode
будет записан результат, а в console выведется ошибка, так как мы попытаемся вызвать не функцию, а значение. В свою очередь в нашем коде отработает все без ошибок.
1. Функциональное выражение доступно для вызова (функция создается) только после того, как интерпретатор дойдет до него. В свою очередь Function Declaration доступно во всем блоке кода, где функция была объявлена, так как обрабатывается интерпретатором до того, как тот приступит к выполнению кода.
alert (showYearCreationJS());
let showYearCreationJS = function() {
return 'JavaScript был разработан в 1995 году';
};
В console можно увидеть ошибку - мы обращаемся к функции showYearCreationJS
, до того, как она была создана. В свою очередь следующий код, отработает корректно.
alert (showWhoOwnsJS());
function showWhoOwnsJS() {
return 'JavaScript не является собственностью какой-либо компании или организации';
}
2. Функциональное выражение в отличие от Function Declaration позволяет обойти предел видимости и обратиться к функции за её пределами.
let a = 9;
let showYearCreationJS; // определяем переменную
if (a == 9) {
showYearCreationJS = function() { // записываем функцию в переменную
return 'JavaScript был разработан в 1995 году';
};
} else {
function showWhoOwnsJS() {
return 'JavaScript не является собственностью какой-либо компании или организации';
}
}
alert (showYearCreationJS()); // вызов пройдет успешно
alert (showWhoOwnsJS()); // ошибка - область видимости showWhoOwnsJS ограничивается else
3. Фигурные скобки в функциональном выражении заканчиваются точкой с запятой, так как в JavaScript любое выражение заканчивается именно так. Если все-таки не поставите ;
код скорее всего отработает корректно, но для того, чтобы избежать возможных ошибок рекомендуется разделать инструкции именно так.
4. Различный синтаксис - функциональное выражение создается внутри другого выражения.
let showPopularFrameworkJS = function() {
return 'Популярные JavaScript фреймворки: React, Next.js, Angular, Vue';
};
Function Declaration записывается отдельной конструкцией function
.
function showPopularLibrariesJS() {
return 'Популярные JavaScript библиотеки: JQuery, Backbone.js, Lodash';
}
Функция это основной строительный блок в JavaScript, а функциональное выражение это один из синтаксисов с помощью, которого можно записать функцию. Всего можно назвать четыре вида записи функции: Function Declaration, Function Expression, анонимные функции и стрелочные функции.
Несмотря на некоторые положительные моменты в функциональных выражениях более предпочтительно и распространено Function Declaration из-за его доступности во всем блоке кода.