Ha csinálok egy sima function-t és benne egy arrow functiont:
A this nem csapja felül az arrow functiont. A külső, befoglaló scope marad meg az arrow functionon belül is. Míg a function felül csapja önmagát, és magát rakja be this-nek.
Az arrow (=>) függvényekben
a this mindig a függvény definíciójának környezetében lévő this-hez tartozik, nem változik.
A sima (function) függvényekben
a this értéke a hívási kontextustól függ: ha objektumon keresztül hívják meg, akkor az objektumra mutat, különben a globális objektumra (pl. window a böngészőben). A this értékét sima függvényeknél a bind, call, és apply metódusok segítségével is állíthatjuk.
Az arrow függvények számára a this konstans, a sima függvények esetében pedig dinamikus a this értéke.
A JavaScript-ben a function (sima function) és az arrow function között több fontos különbség is van. Itt van egy áttekintés a legfontosabb különbségekről:
- Szintaxis:
- Sima function:
function nev() { return 'Ez egy sima function'; } - Arrow function:
const nev = () => 'Ez egy arrow function';
- Sima function:
- A
thiskulcsszó viselkedése:- Sima function esetében a
thisértéke a hívás környezetétől függ. Ha egy metódusként hívjuk meg (pl. objektum metódusaként), akkor az objektumhoz kötődik. Ha szabadon álló funkciót hívunk meg, akkor (strict mode-ban)undefinedlesz, egyébként pedig az általános globális objektumhoz (pl. a böngészőben awindowobjektumhoz) kötődik. - Arrow function esetében a
thisértéke lexikailag kötődik, vagyis az arrow function létrehozásának helyén lévőthis-t veszi fel. Nem kötődik újra, amikor meghívjuk a funkciót.
- Sima function esetében a
- Arguments objektum:
- Sima function rendelkezik egy
argumentsobjektummal, amely egy hasonló tömbhöz tartalmazza a funkcióhoz átadott összes argumentumot. - Arrow function-öknek nincs saját
argumentsobjektuma. Ha azarguments-et használjuk egy arrow function-en belül, akkor az a külső (normál) funkcióargumentsobjektumára fog hivatkozni.
- Sima function rendelkezik egy
- Konstruktor:
- Sima function használható konstruktorként (a
newkulcsszóval kombinálva) új objektumok létrehozásához. - Arrow function nem használható konstruktorként, és hiba keletkezik, ha megpróbáljuk.
- Sima function használható konstruktorként (a
- Prototype tulajdonság:
- Sima function rendelkezik
prototypetulajdonsággal. - Arrow function-nek nincs
prototypetulajdonsága.
- Sima function rendelkezik
- Method shorthand:
- Objektumokban a sima functiont rövidített módon is írhatjuk, ha metódusként használjuk:
const obj = { metodus() { return 'Metódus'; } }; - Arrow function nem használható ilyen rövidített formában.
- Objektumokban a sima functiont rövidített módon is írhatjuk, ha metódusként használjuk:
Ezen különbségek tudatában fontos mérlegelni, melyik fajta funkciót használjuk egy adott helyzetben.
Egy rövidített szintaxisú függvénydefiníció JavaScriptben, amelyet a “=>”, azaz nyíl jel jelöl.
Az arrow function létrehozása egyszerűbb és tömörebb módot kínál a függvények definiálására, és általában a “this” kontextusának kezelésére is más módon reagál, mint a hagyományos függvények.
Hagyományos function
function add(a, b) {
return a + b;
}
Arrow function
const multiply = (a, b) => a * b;
Az arrow function-ök gyakran használatosak rövid és egyszerű kifejezések vagy callback függvények definiálására, és általában rövidebb és olvashatóbb kódot eredményeznek.