Navngivne funktionsudtryk i JavaScript
Lad os sige, at vi har et funktionsudtryk som dette:
let test = function() {
console.log('!');
};
test(); // vil udskrive '!'
Lad os give vores funktion navnet func:
let test = function func() {
console.log('!');
};
test();
Som du allerede ved, kan man ikke tilgå funktionen via dette navn:
let test = function func() {
console.log('!');
};
test(); // vil udskrive '!'
func(); // vil give en fejl
Hvorfor give funktionen et navn, hvis det ikke vil være tilgængeligt? Grunden er, at dette navn vil være utilgængeligt udefra funktionen, men tilgængeligt inde i funktionen.
Lad os tjekke:
let test = function func() {
console.log(func); // funktionen vil udskrive sin egen kildekode
};
test(); // kalder funktionen
Lad os kalde vores funktion inde i den selv:
let test = function func() {
console.log('!'); // udskriver '!'
func(); // kalder os selv
};
test();
Hvis denne kode køres, vil der blive udskrevet et uendeligt antal beskeder til konsollen.
Faktisk kan vores funktion kaldes inde i sig selv
ikke kun som func, men
også som test:
let test = function func() {
console.log('!');
test(); // kalder os selv
};
test();
Hvad er forskellen? Forskellen er, at navnet
test blot er en variabel. I processen
af scriptets udførelse kan vores funktion blive tildelt
en anden variabel eller sendes som en parameter
- i dette tilfælde kan forbindelsen mellem variablen test
og funktionen gå tabt.
Navnet func derimod er hårdt bundet til funktionen
specifikt med henblik på at kunne tilgå
vores funktion inde i den selv.
Sådanne Function Expression med funktionens navn kaldes navngivne funktionsudtryk.