Shprehje Funksionale me Emër në JavaScript
Le të themi se kemi një shprehje funksionale si kjo:
let test = function() {
console.log('!');
};
test(); // do të shfaqë '!'
Le t'i japim funksionit tonë emrin func:
let test = function func() {
console.log('!');
};
test();
Siç e dini tashmë, nuk mund të aksesohet funksioni me këtë emër:
let test = function func() {
console.log('!');
};
test(); // do të shfaqë '!'
func(); // do të japë një gabim
Pse atëherë t'i jepet një emër funksionit, nëse ai nuk do të jetë i disponueshëm? Çështja është se ky emër do të jetë i padisponueshëm nga jashtë funksionit, por i disponueshëm brenda këtij funksioni.
Le ta kontrollojmë:
let test = function func() {
console.log(func); // funksioni do të shfaqë kodin e vet burimor
};
test(); // thërrasim funksionin
Le ta thërrasim funksionin tonë brenda vetvetes:
let test = function func() {
console.log('!'); // shfaqim '!'
func(); // thërrasim vetveten
};
test();
Nëse ekzekutohet ky kod, në konsol do të shfaqet një numër i pafund i shfaqjeve në konsol.
Në fakt, funksioni ynë mund të thirret
brenda vetvetes jo vetëm si func, por
edhe si test:
let test = function func() {
console.log('!');
test(); // thërrasim vetveten
};
test();
Cili është ndryshimi? Ndryshimi është se emri
test është thjesht një ndryshore. Gjatë
procesit të punës së skriptit, funksioni ynë mund të shkruhet
në një ndryshore tjetër ose të kalohet si parametër
- në këtë rast, lidhja midis ndryshores test
dhe funksionit mund të humbasë.
Emri func është i lidhur fort me funksionin
pikërisht në mënyrë që të mund të aksesohet
funksioni ynë brenda vetvetes.
Shprehje të tilla Function Expression me emër të funksionit quhen shprehje funksionale me emër.