Named function expressions in JavaScript

Suppose we have such a functional expression:

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

test(); // shows '!'

Let's name our function func:

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

test();

As you already know, this name does not refer to the function:

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

test(); // shows '!'
func(); // throws an error

Why we give a name to function if it won't be available? The thing is that this name will not be available outside the function, but it will be available inside this function.

Let's check:

javascriptlet test = function func() {
  console.log(func); // the function will output its own source code
};

test(); // call the function

Let's call our function within itself:

javascriptlet test = function func() {
  console.log('!'); // shows '!'
  func(); // calls iself
};

test();

If you run this code, then an infinite number of alerts will be displayed in the console.

In fact, our function can be called internally not only as func, but also as test:

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

test();

What is the difference? The difference is that the name test is just a variable. While the script is running, our function may be written to another variable or passed as a parameter - in this case, the connection between the variable test and the function may be lost.

The name func is hardcoded to the function specifically so that we can refer to our function within itself.

Such Function Expressions with a function name are called named function expressions.