Функция с именем, но Function Expression в JavaScript

Давайте теперь сделаем функцию, которая будет иметь имя, но при этом будет Function Expression, потому что участвует в выражении:

javascript+function func() {
  console.log('!');
}

Интересно, что по имени func мы не сможем обратиться к нашей функции, это будет приводить к ошибке:

javascript+function func() {
  console.log('!');
}

func(); //!! выдаст ошибку

Чтобы иметь возможность вызвать нашу функцию, ее нужно присвоить какой-нибудь переменной:

javascriptlet test = function func() {
  console.log('!');
};

test(); // выведет '!'

Еще раз: функция, являющаяся функциональным выражением не может быть вызвана по ее имени. Такая функция может быть вызвана только с использованием переменной, в которую была записана эта функция.

Но тем не менее, функциональное выражение может иметь имя функции, это будет синтаксически корректно. Зачем такое нужно, мы будем разбираться в следующих уроках.

Подведем итог: функции являются Function Declaration или Function Expression не потому, что имеют имя или не имеют, а потому, что являются участниками выражений или не являются.

Как вы видели выше, функция без имени может быть воспринята как Function Declaration, а функции с именем может быть Function Expression.