Nosauktās funkcionālās izteiksmes JavaScript

Pieņemsim, ka mums ir šāda funkcionālā izteiksme:

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

test(); // izvadīs '!'

Piešķirsim mūsu funkcijai vārdu func:

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

test();

Kā jūs jau zināt, pēc šī vārda nevar piekļūt funkcijai:

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

test(); // izvadīs '!'
func(); // izvadīs kļūdu

Kāpēc tad dot funkcijai vārdu, ja tas nebūs pieejams? Lieta ir tāda, ka šis vārds būs nepieejams no ārpuses funkcijai, bet pieejams tajā pašā funkcijas iekšienē.

Pārbaudīsim:

javascriptlet test = function func() {
  console.log(func); // funkcija izvadīs savu pašas pirmavota kodu
};

test(); // izsaucam funkciju

Izsauksim mūsu funkciju tajā pašā iekšienē:

javascriptlet test = function func() {
  console.log('!'); // izvadām '!'
  func(); // izsaucam paši sevi
};

test();

Ja palaist šo kodu, tad konsolē tiks izvadīts bezgalīgs daudzums izvadu konsolē.

Patiesībā mūsu funkcija var tikt izsaukta pašas iekšienē ne tikai kā func, bet arī kā test:

javascriptlet test = function func() {
  console.log('!');
  test(); // izsaucam paši sevi
};

test();

Kāda tad ir atšķirība? Atšķirība ir tāda, ka vārds test - ir tikai mainīgais. Procesā skripta darbības laikā mūsu funkcija var tikt ierakstīta citā mainīgajā vai nodota kā parametrs - šajā gadījumā saikne starp mainīgo test un funkciju var pazust.

Vārds func ir stingri piesaistīts funkcijai īpaši tam, lai varētu piekļūt mūsu funkcijai tajā pašā iekšienē.

Šādas Function Expression ar funkcijas nosaukumu tiek sauktas par nosauktajām funkcionālajām izteiksmēm.