Tech Jargon sorozat
Valószínűleg már tudja, hogyan írjon függvényeket mindkét módon. function doStuff() {}
és () =>
{} olyan karakterek, amelyeket egész nap beírunk. De miben különböznek egymástól, és miért kell használni őket?
Megjegyzés: A példák JavaScript-ben vannak megadva. Y a M ileage M ay V ed rendű más nyelven.

Az első különbség: név
Ha egy függvényt létrehoz egy névvel , ez egy függvény deklaráció . A név elhagyható a funkciókifejezésekben , így a függvény „névtelen”.
Funkciónyilatkozat:
function doStuff() {};
Funkció kifejezés:
const doStuff = function() {}
Gyakran látunk névtelen függvényeket, amelyeket az ES6 szintaxissal használnak, így:
const doStuff = () => {}
Emelés
Az emelés a függvények és változók rendelkezésre állására utal a kódod „tetején”, szemben csak azok létrehozása után. Az objektumokat fordításkor inicializálják, és a fájlban bárhol elérhetők.
A funkció deklarációk fel vannak emelve, de a funkciók kifejezései nem.
Könnyű megérteni egy példával:
doStuff();
function doStuff() {};
A fentiek nem dobnak hibát, de ez:
doStuff();
const doStuff = () => {};
A függvénykifejezések esete
Úgy tűnhet, hogy a funkciódeklarációk - erőteljes emelő tulajdonságaikkal - kihasználják a funkciók kifejezését. De ha egyiket választja a másik helyett, el kell gondolkodnia azon, hogy mikor és hol szükséges a funkció . Alapvetően kinek kell tudnia erről?
A globális hatókör szennyezésének elkerülése érdekében a funkciókifejezésekre hivatkozunk . Ahelyett, hogy programja sokféle funkcióval lenne tisztában, anonim néven tartva azokat azonnal felhasználja és elfelejti.
IIFE
A név - azonnal hivatkozott függvény-kifejezésekre - nagyjából itt mindent elmond. Ha egy függvény egyidejűleg létrehozásra kerül, akkor hívhat egy IIFE-t, amely így néz ki:
(function() => {})()
vagy:
(() => {})()
Az IIFE-k részletes áttekintéséhez olvassa el ezt az átfogó cikket.
Visszahívások
Egy másik függvénynek átadott függvényt gyakran hívnak visszahívásnak a JavaScript-ben. Íme egy példa:
function mapAction(item) { // do stuff to an item } array.map(mapAction)
array.map(mapAction)
A probléma az, mapAction
hogy a teljes alkalmazás számára elérhető lesz - erre nincs szükség. Ha ez a visszahívás egy funkciókifejezés, akkor nem lesz elérhető az azt használó függvényen kívül:
array.map(item => { //do stuff to an item })
vagy
const mapAction = function(item) { // do stuff to an item } array.map(mapAction)
array.map(mapAction)
bár az inicializálása alattmapAction
kódolható lesz .
Összegzés
Röviden, akkor használja a függvénydeklarációkat, ha egy függvényt a globális hatókörön szeretne létrehozni, és elérhetővé tenné az egész kódjában. A funkciókifejezések használatával korlátozhatja a funkció elérhetőségét, világossá tegye a globális hatókörét és fenntartsa a tiszta szintaxist.
Hivatkozások
- Funkció deklaráció, MDN dokumentumok.
- Funkció kifejezés, MDN dokumentumok.
- Emelés, MDN szószedet.
A Tech Jargon sorozat
Olyan sok mondat merül fel a technikai találkozókon és konferenciákon, feltételezve, hogy már mindenki le van tiltva a szóhasználattal. Gyakran nem vagyok rosszul a nyelven. Gyakran előfordul, hogy a fejlesztők elképedve cselekszenek, hogy hiányzik egy kis tudásom.
Az az igazság, hogy gyakran csak nem tudom a megfelelő szót rá. Emberként, de különösen fejlesztő emberként szeretjük elbocsátani azokat, akik nem „beszélik a beszélgetést”, ezért ez a sorozat arról szól, hogy alaposan megértsük azokat a programozási fogalmakat, amelyeket az embernek „ismernie kell”.
Ez a sorozat második cikke. Az első a magasabb rendű funkciók voltak. Vigyázzon többet, amikor találkozókra és konferenciákra járok, és úgy teszek, mintha tudnám, miről beszélnek technikus társaim, de aztán haza kell mennem, és guglizni.