Genoemde functionele expressies in JavaScript

Stel we hebben de volgende functionele expressie:

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

test(); // geeft '!' weer

Laten we onze functie de naam func geven:

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

test();

Zoals je al weet, kan je niet via deze naam bij de functie:

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

test(); // geeft '!' weer
func(); // geeft een foutmelding

Waarom zou je de functie een naam geven als deze niet beschikbaar is? Het punt is dat deze naam niet toegankelijk is buiten de functie, maar wel binnenin deze functie.

Laten we dit testen:

javascriptlet test = function func() {
  console.log(func); // de functie geeft haar eigen broncode weer
};

test(); // roepen de functie aan

Laten we onze functie binnenin zichzelf aanroepen:

javascriptlet test = function func() {
  console.log('!'); // geven '!' weer
  func(); // roepen onszelf aan
};

test();

Als je deze code uitvoert, zal er een oneindig aantal keer naar de console worden uitgevoerd.

In feite kan onze functie binnenin zichzelf niet alleen worden aangeroepen als func, maar ook als test:

javascriptlet test = function func() {
  console.log('!');
  test(); // roepen onszelf aan
};

test();

Wat is dan het verschil? Het verschil is dat de naam test slechts een variabele is. Tijdens het uitvoeren van het script kan onze functie in een andere variabele worden opgeslagen of als parameter worden doorgegeven - in dat geval kan de verbinding tussen de variabele test en de functie verbroken worden.

De naam func is daarentegen hard aan de functie gebonden, specifiek zodat we naar onze functie binnenin zichzelf kunnen verwijzen.

Dergebijke Function Expression met een functienaam worden genoemde functionele expressies genoemd.