Nuanțe ale expresiilor funcționale în JavaScript
Denumirea de Function Expression nu este dată întâmplător. Ea într-adevăr înseamnă asta - adică astfel de funcții sunt parte a unei expresii.
De exemplu, putem adăuga un șir de caractere și o funcție fără nume:
let str = 'str' + function() {return 3;};
console.log(str); // va afișa 'strfunction() {return 3;}'
De ce vedem un rezultat atât de ciudat,
și nu numărul 3? Pentru că al doilea termen
- nu este rezultatul funcției, ci codul ei sursă
(noi nu am apelat acea funcție, ci doar
am scris-o).
Adică denumirea expresie funcțională indică faptul că o astfel de funcție participă într-o expresie.
Atribuirea unei variabile este de asemenea o expresie:
let func = function() {
console.log('!');
};
Putem de asemenea, de exemplu, să transmitem funcția
ca parametru în console.log și acesta va afișa
codul ei sursă în consolă - aceasta va fi considerată
de asemenea o expresie:
console.log(function() {return 3;});
De ce este acest lucru important: pentru că diferența dintre Function Declaration și Function Expression nu este deloc în faptul că prima funcție este creată cu un nume, iar a doua inițial nu are nume. Asta nu este adevărat.
Exemplu. Iată o funcție fără nume, dar care nu participă în nicio expresie (adică nu i se fac nicio acțiune, vorbind simplu):
/*
Această funcție va fi Function Declaration,
dar cu o eroare sintactică:
*/
function() {
console.log('!');
}
Un astfel de cod va da o eroare! De ce: pentru că funcția nu participă în nicio expresie, browserul o consideră Function Declaration, dar nu îi găsește numele și dă o eroare.
Pentru a elimina eroarea, trebuie să forțăm funcția
să devină parte a unei expresii. De exemplu,
scriem în fața ei operația +:
+function() { // un astfel de cod este corect
console.log('!');
};
Cum funcționează: operația +
nu face nimic, este la fel ca și cum am scrie
în loc de numărul 3 numărul +3 - este permis,
dar nu schimbă nimic.
Dar în cazul funcției - schimbă. Acum funcția noastră nu mai este doar scrisă, ci participă într-o expresie. De aceea nu va mai fi eroare. Nici rezultatul executării funcției nu va fi, pentru că noi doar am scris-o, dar nu am apelat-o.
În loc de + putem scrie orice.
De exemplu:
-function() { // un astfel de cod este corect
console.log('!');
};
!function() { // un astfel de cod este corect
console.log('!');
};
Putem de asemenea să punem funcția noastră în paranteze rotunde, în acest caz ea va deveni de asemenea o expresie funcțională:
(function() { // un astfel de cod este corect
console.log('!');
});
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
function func() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
let func = function() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
+function() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
!function func() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
-function func() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
1 + function func() {
console.log('!');
}
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
(function func() {
console.log('!');
})
Determinați dacă funcția prezentată este Function Declaration sau Function Expression:
console.log(
function() {
console.log('!');
}
);