Az Arrow funkciók tisztábbak és egyszerűbbek, mint a hosszú ívű szokásos alternatíváik, de nem szabad rohanni a használatukkal anélkül, hogy nem tudnád, hogyan működnek.

A nyíl függvény szintaxisa az ECMAScript 2015, más néven ES6 kiadásával érkezett meg. Manapság a nyílfüggvények sok JavaScript programozó kedvenc funkciójává váltak. A nyílfüggvények iránti szeretet a "this" kulcsszó tömör szintaxisának és egyértelmű viselkedésének köszönhető.

De a nyíl függvényeknek van néhány hátránya. Ismerje meg a nyílfüggvények és a normál függvények közötti fő különbségeket, és derítse ki, hogy a legtöbb esetben miért jobb, ha ragaszkodik a normál funkciókhoz.

1. Használat előtt meg kell határoznia egy nyíl funkciót

Nyíl funkciót nem lehet felemelni. A JavaScript alapértelmezett emelési szabályai lehetővé teszi egy függvény meghívását a definiálás előtt, de ez nem így van a nyílfüggvényeknél. Ha van egy JavaScript-fájlja függvényekkel, ez azt jelenti, hogy az összes fontos kód a fájl alján lesz.

Vegyük például a következő JavaScript kódot:

instagram viewer
const doubleNumbers = (számok) { 
numbers.map(n => n * 2)
}

const halfNumbers = (számok) {
numbers.map(n => n / 2)
}

const sumNumbers = (számok) {
numbers.reduce((összeg, n) => {
Visszatérés összeg + n;
}, 0)
}

const számok = [1, 20, 300, 700, 1500]
const megduplázva = doubleNumbers (számok)
konzol.log (halveNumbers (duplázva))
konzol.log (sumNumbers (számok))

A fenti kódblokkban a fontos kód alul van. A segítő függvények mind a végrehajtási pont előtt vannak meghatározva. Kell tenni vmit létrehozza a JavaScript függvényeket a fájl tetején lévő hely kényelmetlen lehet, mert le kell görgetnie, hogy megtekinthesse a ténylegesen működő kódot.

Ha a segédfunkciókat alulra, a tényleges kódot pedig felülre helyezte, hivatkozási hibát kap. A futási környezet a függvényt változóként kezeli. Ezért először meg kell határoznia, mielőtt hozzáférne vagy meghívná. De ha az összes nyílfüggvényt normál függvényekké alakította át (a funkció kulcsszó), akkor a kód jól működne. Ugyanakkor a fontos kód a tetején marad, ahol megtalálhatja.

Ez az egyik legnagyobb probléma a nyíl függvények használatával. Nem mutatnak semmilyen vendéglátó magatartást. Más szóval, meg kell határoznia őket a tényleges használat előtt. Másrészt normál funkciókat emelhet.

2. A nyílfunkciók zavaróak lehetnek egyesek számára

A másik ok arra, hogy a nyílfüggvények helyett normál függvényeket használjunk, az olvashatóság. A normál függvények könnyebben olvashatók, mert kifejezetten használják a funkció kulcsszó. Ez a kulcsszó azt jelzi, hogy a kérdéses kód egy függvény.

Másrészt nyílfüggvényeket rendel a változókhoz. Kezdőként ez megzavarhatja Önt, és azt gondolhatja, hogy a kód inkább változó, mint függvény.

Hasonlítsa össze az alábbi két funkciót:

const halfNumbers = (számok) => {
Visszatérés numbers.map(n => n / 2)
}

funkcióhalfNumbers(számok) {
Visszatérés numbers.map(n => n / 2)
}

Első pillantásra könnyen megállapíthatja, hogy a kód második része egy függvény. A szintaxis egyértelművé teszi, hogy a kód függvény. Az első azonban kétértelmű – lehet, hogy nem könnyű megállapítani, hogy ez egy változó vagy egy függvény.

3. A nyílfüggvényeket nem használhatja módszerként

Ha nyílfüggvényt használ, a ez kulcsszó annak felel meg, ami kívül esik azon a dolgon, amiben vagyunk. A legtöbb esetben ez az ablak objektum.

Tekintsük a következő objektumot:

const személy = {
keresztnév: "Kyle",
vezetéknév: "Szakács",
nyomtatott név: () => {
konzol.log(`${ez.keresztnév}``${ez.vezetéknév}` )
}
}

person.printName()

Ha futtatja a kódot, észre fogja venni, hogy a böngésző nyomtat határozatlan kereszt- és vezetéknévre egyaránt. Mivel nyílfüggvényt használunk, ez kulcsszó az ablak objektumnak felel meg. Ezenkívül nincs keresztnév vagy vezetéknév ott meghatározott tulajdonság.

A probléma megoldásához egy szokásos függvényt kell használnia:

const személy = {
keresztnév: "Kyle",
vezetéknév: "Szakács",
nyomtatott név: funkció() {
konzol.log(`${ez.keresztnév}``${ez.vezetéknév}` )
}
}

person.printName()

Ez jól fog működni, mert ez utal a személy tárgy. Ha sok ilyen objektum-orientált programozást fog végezni, akkor meg kell győződnie arról, hogy normál függvényeket használ. A nyíl funkciók nem működnek.

Mikor kell használni a nyílfüggvényeket

Főleg olyan helyeken használja a nyíl függvényeket, ahol anonim funkcióra van szüksége. Ilyen forgatókönyv például a visszahívási függvény kezelése. A visszahívás írásakor jobb egy nyíl függvényt használni, mert a szintaxis sokkal egyszerűbb, mint egy teljes függvény írása.

Hasonlítsa össze ezt a kettőt, és döntse el, melyik az egyszerűbb:

funkcióhalfNumbers(számok) {
Visszatérés numbers.map(n => n / 2)
}

funkcióhalfNumbers(számok) {
Visszatérés numbers.map(funkció(n) {
Visszatérés n / 2
})
}

Mindkét eset átad egy visszahívási függvényt a map() metódusnak. De az első visszahívás egy nyíl funkció, míg a második egy teljes funkció. Láthatja, hogy az első függvény kevesebb kódsort foglal el, mint a második függvény: három vs. öt.

A másik alkalom a nyílfüggvények használatára az, amikor egy adott "ezzel" szintaxissal kíván foglalkozni. A "this" objektum attól függően változik, hogy normál függvényeket vagy nyílfüggvényeket használ-e bizonyos dolgokhoz.

A következő kódblokk két „kattintásos” eseményfigyelőt regisztrál a dokumentum objektumon. Az első példány normál függvényt használ visszahívásként, míg a második egy nyíl függvényt. Mindkét visszahíváson belül a kód naplózza a végrehajtási objektumot (ezt) és az eseménycélt:

dokumentum.addEventListener("kattintás", funkció(e) {
konzol.log("FUNKCIÓ", ez, e.target)
})

dokumentum.addEventListener("kattintás", (e) => {
konzol.log("NYÍL", ez, e.target)
})

Ha ezt a szkriptet futtatná, észreveheti, hogy az „ez” hivatkozás mindkettőnél eltérő. A normál függvény esetében ez a tulajdonság a dokumentumra hivatkozik, amely megegyezik a e.cél ingatlan. De a nyíl függvény esetében ez az ablak objektumra hivatkozik.

Ha normál függvényt használ visszahívásként, akkor ez arra az elemre vonatkozik, ahol az eseményt kiváltjuk. De ha nyílfüggvényt használ, akkor ez a kulcsszó alapértelmezés szerint az ablak objektum.

Tudjon meg többet a nyílfüggvények és a reguláris függvények funkcióiról

Számos más finom különbség is van a normál függvények és a nyíl függvények között. Mindkét funkciótípus elsajátítása alapja a JavaScript elsajátításának. Tanulja meg, mikor kell használni az egyiket és mikor a másikat; akkor megértheti, milyen következményekkel jár egy normál függvény vagy egy nyíl függvény használata a JavaScriptben.