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:

javascriptlet 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:

javascriptlet 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:

javascriptconsole.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):

javascript/*
  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 +:

javascript+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:

javascript-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ă:

javascript(function() { // un astfel de cod este corect
  console.log('!');
});
Задание 1

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascriptfunction func() {
  console.log('!');
}
Задание 2

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascriptlet func = function() {
  console.log('!');
}
Задание 3

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascript+function() {
  console.log('!');
}
Задание 4

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascript!function func() {
  console.log('!');
}
Задание 5

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascript-function func() {
  console.log('!');
}
Задание 6

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascript1 + function func() {
  console.log('!');
}
Задание 7

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascript(function func() {
  console.log('!');
})
Задание 8

Determinați dacă funcția prezentată este Function Declaration sau Function Expression:

javascriptconsole.log(
  function() {
    console.log('!');
  }
);