Nuancat e Shprehjeve Funksionale në JavaScript
Emri Function Expression nuk është dhënë kot. Ai vërtetë do të thotë këtë - që funksione të tilla janë pjesë e ndonjë shprehjeje.
Për shembull, ne mund të mbledhim ndonjë varg dhe një funksion pa emër:
let str = 'str' + function() {return 3;};
console.log(str); // do të shfaqë 'strfunction() {return 3;}'
Pse e shohim një rezultat kaq të çuditshëm,
dhe jo numrin 3? Sepse përbërësi i dytë
- nuk është rezultat i punës së funksionit, por kodi burimor
i tij (ne nuk e kemi thirrur këtë funksion, thjesht
e kemi shkruar).
Kjo do të thotë se emri shprehje funksionale tregon se një funksion i tillë merr pjesë në ndonjë shprehje.
Caktimi në një ndryshore është gjithashtu shprehje:
let func = function() {
console.log('!');
};
Mund të, për shembull, të kalojmë funksionin
si parametër në console.log dhe ai do të shfaqë
kodin burimor të tij në konsolë - kjo gjithashtu do të
konsiderohet shprehje:
console.log(function() {return 3;});
Pse kjo është e rëndësishme: sepse ndryshimi midis Function Declaration dhe Function Expression nuk është aspak në atë që funksioni i parë krijohet me emër, ndërsa i dyti fillimisht nuk ka emër. Nuk është kështu.
Shembull. Këtu kemi një funksion pa emër, por që nuk merr pjesë në asnjë shprehje (d.m.th. nuk kryhen asnjë veprim me të, për ta thënë thjesht):
/*
Ky funksion do të jetë Function Declaration,
por me gabim sintaksor:
*/
function() {
console.log('!');
}
Një kod i tillë do të japë gabim! Pse: meqenëse funksioni nuk merr pjesë në asnjë shprehje, shfletuesi e konsideron atë si Function Declaration, por nuk gjen emrin e tij dhe jep një gabim.
Që gabimi të zhduket, duhet ta bëjmë funksionin
pjesë të ndonjë shprehjeje. Për shembull,
të shkruajmë përpara tij operacionin +:
+function() { // kod i tillë është i saktë
console.log('!');
};
Si funksionon kjo: vetë operacioni +
nuk bën asgjë, kjo është njësoj sikur të shkruash
në vend të numrit 3 numrin +3 - është e lejueshme,
por nuk ndryshon asgjë.
Por në rastin e funksionit - ndryshon. Tani funksioni ynë nuk është thjesht i shkruar, por merr pjesë në një shprehje. Prandaj tani nuk do të ketë gabim. As nuk do të ketë rezultat ekzekutimi të funksionit, ne thjesht e kemi shkruar atë, por nuk e kemi thirrur.
Në vend të + mund të shkruhet çdo gjë.
Për shembull:
-function() { // kod i tillë është i saktë
console.log('!');
};
!function() { // kod i tillë është i saktë
console.log('!');
};
Mund gjithashtu ta vendosim funksionin tonë në kllapa të rrumbullakëta, në këtë rast ai gjithashtu do të bëhet shprehje funksionale:
(function() { // kod i tillë është i saktë
console.log('!');
});
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
function func() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
let func = function() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
+function() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
!function func() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
-function func() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
1 + function func() {
console.log('!');
}
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
(function func() {
console.log('!');
})
Përcaktoni nëse funksioni i paraqitur është Function Declaration apo Function Expression:
console.log(
function() {
console.log('!');
}
);