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

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

Позвольте мне пояснить на примере.

function statement()
{
   console.log("This is a statement");
}

Это оператор функции. Это в основном то, как вы определяете свои функции в своем коде. Ничего нового.

Теперь давайте сделаем это немного по-другому.

var expression = function()
{
   console.log("This is an expression");
}

Теперь это функциональное выражение. Как видите, единственная разница здесь в том, что эта функция создается как анонимная функция и присваивается переменной.

Это не обязательно должна быть анонимная функция, но может быть и именованная функция.

var expression = function named()
{
   console.log("This is an expression");
}

Теперь давайте попробуем оценить эти два подхода для создания функции.

function statement()
{
   console.log("This is a statement");
}
var expression = function()
{
   console.log("This is an expression");
}
statement();
expression();

Выход:

This is a statement
This is an expression

Ничего удивительного. Как вы и ожидали. 😬

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

statement();
expression();
function statement()
{
   console.log("This is a statement");
}
var expression = function()
{
   console.log("This is an expression");
}

Но нет. 😑 Посмотрите на результат этого.

This is a statement
Uncaught TypeError: expression is not a function

Странно, верно? 🤨 Не совсем так.

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

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

Спасибо за прочтение!