A funkcionális kifejezések árnyalatai a JavaScriptben

A Function Expression elnevezés nem véletlenül kapta ezt a nevet. Valóban azt jelenti, hogy az ilyen függvények részei valamilyen kifejezésnek.

Például összeadhatunk egy stringet és egy névtelen függvényt:

javascriptlet str = 'str' + function() {return 3;};
console.log(str); // kiírja: 'strfunction() {return 3;}'

Miért látunk ilyen furcsa eredményt, és nem a 3 számot? Mert a második tag nem a függvény működésének eredménye, hanem annak forráskódja (hiszen mi nem hívtuk meg a függvényt, csak egyszerűen leírtuk).

Tehát a funkcionális kifejezés elnevezés azt jelenti, hogy egy ilyen függvény részt vesz valamilyen kifejezésben.

A változóhoz való hozzárendelés is kifejezés:

javascriptlet func = function() {
  console.log('!');
};

Lehetőség van például arra is, hogy egy függvényt paraméterként adjunk át a console.log-nak, és az kiírja annak forráskódját a konzolra - ez szintén kifejezésnek számít:

javascriptconsole.log(function() {return 3;});

Miért fontos ez: mert a Function Declaration és a Function Expression közötti különbség egyáltalán nem az, hogy az első függvény névvel jön létre, míg a második eredetileg név nélküli. Ez nem így van.

Példa. Itt van egy függvényünk név nélkül, de közben nem vesz részt semmilyen kifejezésben (azaz nem hajtunk végre vele semmilyen műveletet, egyszerűen szólva):

javascript/*
  Ez a függvény Function Declaration lesz,
  de szintaktikai hibával:
*/
function() {
  console.log('!');
}

Egy ilyen kód egyáltalán hibát fog adni! Miért: mivel a függvény nem vesz részt semmilyen kifejezésben, a böngésző Function Declaration-nek tekinti, de nem találja a nevét, és hibát jelez.

Ahhoz, hogy a hiba eltűnjön, azt kell tennünk, hogy a függvényt valamilyen kifejezés részévé tesszük. Például írjunk elé egy + műveletet:

javascript+function() { // egy ilyen kód helyes
  console.log('!');
};

Hogyan működik ez: maga a + művelet önmagában nem csinál semmit, ez olyan, mintha a 3 szám helyett a +3 számot írnánk - megengedett, de semmit sem változtat.

De függvény esetében - változtat. Most már a mi függvényünk nem csak le van írva, hanem részt vesz egy kifejezésben. Ezért most már nem lesz hiba. A függvény végrehajtásának eredménye sem lesz, hiszen csak leírtuk, de nem hívtuk meg.

A + helyett bármit írhatunk. Például:

javascript-function() { // egy ilyen kód helyes
  console.log('!');
};

!function() { // egy ilyen kód helyes
  console.log('!');
};

A függvényünket zárójelek közé is helyezhetjük, ebben az esetben az szintén funkcionális kifejezéssé válik:

javascript(function() { // egy ilyen kód helyes
  console.log('!');
});
Задание 1

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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

Határozza meg, hogy az bemutatott függvény Function Declaration vagy Function Expression:

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