Millal funktsiooni deklaratsiooni vs funktsiooni avaldist kasutada

Tech Jargoni sari

Tõenäoliselt teate juba, kuidas funktsioone mõlemal viisil kirjutada. function doStuff() {}ja () =>{} on tähed, mida me kogu päeva kirjutame. Kuid kuidas nad erinevad ja miks kasutada ühte teise üle?

Märkus. Näited on toodud JavaScripti abil. Y meie M ileage M ay V aarne teiste keeltes.

Esimene erinevus: nimi

Kui loote funktsiooni nimega , see on funktsiooni deklaratsioon . Nime võib funktsiooni avaldistes välja jätta , muutes selle funktsiooni anonüümseks.

Funktsioonide deklaratsioon:

function doStuff() {};

Funktsiooni avaldis:

const doStuff = function() {}

Sageli näeme ES6 süntaksiga kasutatavaid anonüümseid funktsioone:

const doStuff = () => {}

Tõstmine

Tõstmine viitab funktsioonide ja muutujate kättesaadavusele teie koodi ülaosas, mitte ainult pärast nende loomist. Objektid lähtestatakse kompileerimise ajal ja on teie failis saadaval kõikjal.

Funktsioonide deklaratsioonid on tõstetud, kuid funktsioonide avaldised mitte.

Näite abil on seda lihtne mõista:

doStuff();
function doStuff() {};

Eeltoodu ei põhjusta viga, kuid see:

doStuff();
const doStuff = () => {};

Funktsioonide avaldiste juhtum

Võib tunduda, et funktsioonideklaratsioonid oma võimsate tõstmisomadustega muudavad funktsiooni avaldised kasulikumaks. Kuid ühe valimine teise üle nõuab mõtlemist selle üle, millal ja kus funktsiooni vajatakse . Põhimõtteliselt, kes peab sellest teadma?

Funktsioonide avaldistele pöördutakse globaalse ulatuse saastamise vältimiseks . Selle asemel, et teie programm oleks teadlik paljudest erinevatest funktsioonidest, kasutatakse neid anonüümsena hoides ja unustatakse kohe.

IIFE

Nimi - kohe kutsutud funktsiooniväljendid - ütleb siin kõik üsna ära. Kui funktsioon luuakse samal ajal, kui seda kutsutakse, saate kasutada IIFE-d, mis näeb välja selline:

(function() => {})()

või:

(() => {})()

IIFE-de põhjaliku ülevaate saamiseks vaadake seda põhjalikku artiklit.

Tagasihelistamised

Teisele funktsioonile edastatud funktsiooni nimetatakse JavaScriptis sageli tagasihelistamiseks. Siin on näide:

function mapAction(item) { // do stuff to an item } array.map(mapAction)
array.map(mapAction)

Siin on probleem see, et mapActionsee on saadaval kogu teie rakendusele - selleks pole vajadust. Kui see tagasihelistamine on funktsiooni avaldis, pole see saadaval väljaspool seda kasutavat funktsiooni:

array.map(item => { //do stuff to an item })

või

const mapAction = function(item) { // do stuff to an item } array.map(mapAction)
array.map(mapAction)

kuigi mapActionsee on initsialiseerimise all koodi jaoks saadaval .

Kokkuvõte

Lühidalt, kasutage funktsiooni deklaratsioone, kui soovite luua funktsiooni globaalses ulatuses ja teha see kogu oma koodis kättesaadavaks. Funktsiooni avaldiste abil saate piirata funktsiooni kättesaadavust, hoida globaalse ulatuse valguses ja säilitada puhta süntaksi.

Viited

  • Funktsioonideklaratsioon, MDN-i dokumendid.
  • Funktsiooni avaldis, MDN-i dokumendid.
  • Tõstmine, MDN-i sõnastik.

Tech Jargoni seeria

Tehnikakohtumistel ja konverentsidel visatakse nii palju fraase, eeldades, et kõik on juba keelega maas. Ma pole sageli keelega alla jäänud. Arendajate jaoks on tavaline, et nad tegutsevad hämmastunult, et mul puudub teadmistepagas.

Tõsi on see, et ma lihtsalt ei tea selle jaoks õiget sõna. Inimestena, aga eriti arendajainimestena, armastame meelt vabastada need, kes ei räägi juttu, seega on selle sarja eesmärk saada kindel arusaam programmeerimiskontseptsioonidest, mida inimene peaks "teadma".

See on sarja teine ​​artikkel. Esimene oli kõrgemat järku funktsioonid. Vaadake rohkem, kui ma kohtumistel ja konverentsidel käin, ja teesklen, et tean, millest mu tehnilised tehnikad räägivad, kuid pean seejärel koju minema ja seda Google'i kasutama.