Navngitte funksjonsuttrykk i JavaScript
La oss si at vi har et funksjonsuttrykk som dette:
let test = function() {
console.log('!');
};
test(); // vil skrive ut '!'
La oss gi funksjonen vår navnet func:
let test = function func() {
console.log('!');
};
test();
Som du allerede vet, kan man ikke få tilgang til funksjonen via dette navnet:
let test = function func() {
console.log('!');
};
test(); // vil skrive ut '!'
func(); // vil gi en feil
Hvorfor gi funksjonen et navn hvis det ikke vil være tilgjengelig? Poenget er at dette navnet vil være utilgjengelig utenfor funksjonen, men tilgjengelig inni denne funksjonen.
La oss sjekke:
let test = function func() {
console.log(func); // funksjonen vil skrive ut sin egen kildekode
};
test(); // kaller funksjonen
La oss kalle funksjonen vår inni seg selv:
let test = function func() {
console.log('!'); // skriver ut '!'
func(); // kaller oss selv
};
test();
Hvis du kjører denne koden, vil det skrives ut et uendelig antall utskrifter til konsollen.
Faktisk kan funksjonen vår kalles
innenfor seg selv ikke bare som func, men
også som test:
let test = function func() {
console.log('!');
test(); // kaller oss selv
};
test();
Hva er forskjellen? Forskjellen er at navnet
test bare er en variabel. I prosessen
med å kjøre skriptet kan funksjonen vår bli tildelt
en annen variabel eller sendt som en parameter
- i så fall kan forbindelsen mellom variabelen test
og funksjonen forsvinne.
Navnet func derimot er hardkoblet til funksjonen
spesielt for å gjøre det mulig å referere til
funksjonen vår innenfor seg selv.
Slike Function Expression med funksjonsnavn kalles navngitte funksjonsuttrykk.