Nimetetyt funktionaaliset lausekkeet JavaScriptissä
Oletetaan, että meillä on tällainen funktionaalinen lauseke:
let test = function() {
console.log('!');
};
test(); // tulostaa '!'
Annetaan funktiollemme nimi func:
let test = function func() {
console.log('!');
};
test();
Kuten jo tiedät, tällä nimellä ei voi viitata funktioon:
let test = function func() {
console.log('!');
};
test(); // tulostaa '!'
func(); // aiheuttaa virheen
Miksi antaa funktiolle nimi, jos sitä ei ole saatavilla ulkopuolelta? Asia on siinä, että tämä nimi on saatavilla funktion sisällä, mutta ei sen ulkopuolella.
Testataan tätä:
let test = function func() {
console.log(func); // funktio tulostaa oman lähdekoodinsa
};
test(); // kutsutaan funktiota
Kutsutaan funktiotamme sen sisällä:
let test = function func() {
console.log('!'); // tulostetaan '!'
func(); // kutsutaan itseämme
};
test();
Jos tämä koodi ajetaan, konsoliin tulostuu loputon määrä tulostuksia.
Itse asiassa funktiomme voidaan kutsua
sisäisesti paitsi nimellä func, myös
nimellä test:
let test = function func() {
console.log('!');
test(); // kutsutaan itseämme
};
test();
Mikä ero on? Erona on, että nimi
test on vain muuttuja. Skriptin
suorituksen aikana funktiomme voi tallentua
toiseen muuttujaan tai välittyä parametrina
- tässä tapauksessa yhteys muuttujan test
ja funktion välillä voi katketa.
Nimi func on kuitenkin tiukasti sidottu funktioon
nimenomaan siksi, että funktioon voidaan viitata
sen sisällä.
Tällaisia Function Expression -lausekkeita, joissa on funktion nimi, kutsutaan nimetyiksi funktionaalisiksi lausekkeiksi.