Be sintaksės, tarp jų yra ir papildomų skirtumų.
Kaip ir beveik kiekviena šiuolaikinė programavimo kalba, „JavaScript“ siūlo būdus, kaip sukurti funkcijas, kad būtų galima pakartotinai naudoti kodą. Tiems, kurie nėra susipažinę su kalba, yra du skirtingi būdai deklaruoti funkciją „JavaScript“.
Iš pradžių, funkcija buvo naudojamas raktinis žodis, o vėliau buvo sukurta rodyklės sintaksė. Nors funkcijos pasiekiamumas skiriasi, ir funkcijos raktinis žodis, ir rodyklės sintaksė sukuria panašius rezultatus.
Nesugebėjimas atskirti šių dviejų gali sukelti problemų ir lemti netinkamą naudojimą. Šiuolaikiniam JS kūrėjui būtina suprasti, kaip kiekviena funkcijos deklaracija veikia apimtį ir matomumą.
Kokios yra „JavaScript“ rodyklės funkcijos?
„JavaScript“ rodyklės funkcijos yra alternatyvus būdas apibrėžti funkcijas, kurios nenaudoja numatytosios funkcija raktažodis:
funkcijalogPranešimas(žinutę) {
konsolė.log (pranešimas);
}konst logMessage = (žinutę) => {
konsolė.log (pranešimas);
}
konst logMessage = žinutę =>konsolė.log (pranešimas);
Aukščiau galite matyti tą patį pranešimą, parašytą trimis skirtingais būdais. Pirmasis naudoja įprastą funkcijų deklaravimo metodą. Kiti du rodo du būdus, kaip naudoti ES6 rodyklių funkcijas.
„JavaScript“ pirmą kartą priėmė rodyklės funkcijos sintaksę, kai buvo išleisti ECMAScript 2015 standartai. Rodyklės funkcijos pasiūlė aiškų ir glaustą būdą greitai sukurti funkcijas ir įdomų kelių ilgalaikių problemų sprendimą „JavaScript“.
Dėl šių funkcijų rodyklės funkcijos greitai tapo populiariomis tarp daugelio kūrėjų. Programuotojai, ieškantys šiuolaikinės „JavaScript“ kodų bazės, taip pat gali rasti rodyklės funkcijas kaip ir įprastas funkcijas.
Kuo „JavaScript“ rodyklės funkcijos skiriasi nuo įprastų funkcijų?
Iš pirmo žvilgsnio rodyklės funkcijos nelabai skiriasi nuo funkcijų, deklaruotų naudojant funkcijos raktinį žodį. Už sintaksės ribų abu apima daugkartinį veiksmų rinkinį, kurį galima iškviesti iš kitos kodo vietos.
Nepaisant šių dviejų panašumų, yra keletas skirtumų, kuriuos kūrėjai turi žinoti.
Taikymo srities skirtumas
Kai „JavaScript“ yra deklaruojama įprasta funkcija, tai funkcija veikia kaip uždarymas, sukuriantis savo apimtį. Tai gali sukelti problemų naudojant tam tikras specializuotas funkcijas, pvz setTimeout ir setInterval.
Prieš pradedant ES6, buvo daug sprendimų, kurie padidintų elementus, kuriuos būtų galima naudoti atgalinio skambučio metu. Šie įsilaužimai veikė, bet dažnai buvo sunkiai suprantami ir gali sukelti problemų dėl tam tikrų kintamųjų perrašymo.
Rodyklės funkcijos išsprendė abi problemas paprastai ir elegantiškai. Kai rodyklės funkcija naudojama kaip atgalinio skambinimo dalis, ji turi prieigą prie tos pačios apimties kaip ir funkcija, iš kurios ji buvo iškviesta.
Tai leido funkcijas naudoti kaip atgalinius skambučius, neprarandant prieigos prie konteksto, kuriame buvo iškviestas pradinis įvykis. Kaip paprastą testą, kad parodytumėte šio principo veikimą, galite nustatyti atidėto pranešimų siuntimo funkciją, kaip nurodyta toliau:
funkcijauždelstas pranešimas(žinutė, delsimas) {
setTimeout(funkcija(žinutę) {
konsolė.log (pranešimas);
}, delsimas);}
delayedMessage("Labas pasauli", 1000);
Funkcija paprasta, priimtina žinutę ir delsimas milisekundėmis. Praėjus delsai, jis turėtų užregistruoti pranešimą konsolėje. Tačiau kai kodas vykdomas, neapibrėžtas bus prisijungęs prie konsolės, o ne pranešimo, kuris buvo perduotas.
Kai vykdoma atgalinio skambinimo funkcija, taikymo sritis pasikeičia ir pradinis pranešimas nebepasiekiamas. Naudojant pranešimą iš uždarymo, pranešimas turi būti perkeltas į visuotinį kintamąjį, todėl jis gali būti perrašytas prieš skambinant atgal.
Rodyklės funkcija yra tinkamas šios problemos sprendimas. Jei pakeisite pirmąjį argumentą už setTimeout, apimtį galima išlaikyti, o funkcija turės prieigą prie pranešimo, perduoto uždelstas pranešimas.
funkcijauždelstas pranešimas(žinutė, delsimas) {
setTimeout(() => {
konsolė.log (pranešimas);
}, delsimas);}
delayedMessage("Labas pasauli", 1000);
Dabar, kai įvykdyta uždelstas pranešimas funkcija užregistruos pranešimą. Be to, tai leidžia eilėje įrašyti kelis pranešimus su skirtingu vėlavimu, ir jie visi vis tiek pasirodys tinkamu laiku.
Taip yra dėl to, kad kiekvieną kartą uždelstas pranešimas yra naudojamas, jis sukuria savo apimtį su savo vidinės rodyklės funkcijos kopija.
Kodo skaitomumas
Nors rodyklių funkcijos yra naudingos kaip atgaliniai skambučiai, jos taip pat naudojamos norint, kad kodas būtų švarus ir glaustas. Aukščiau pateiktame skyriuje matote, kad naudojant rodyklės funkciją tampa akivaizdu, kas nutiks, kai uždelstas pranešimas funkcija vadinama.
Kadangi funkcijos tampa sudėtingesnės, dėl šiek tiek aiškumo kodas gali būti daug lengviau skaitomas. Kuriant objektus, tai gali supaprastinti kodą pridedant trumpų funkcijų:
klasėskaitiklis{
_skaičius = 0;
prieaugis = () => {
tai._count += 1;
}
mažėjimas = () => {
tai._count -= 1;
}
skaičiuoti = () => {
grąžintitai._count;
}
}
leisti ct = naujas skaitiklis ();
Vaidmuo objektiniame programavime
Nors „JavaScript“ rodyklių funkcijos yra neatsiejama funkcinio programavimo dalis, jos taip pat turi savo vietą Objektinis programavimas. Rodyklės funkcijos gali būti naudojamos klasių deklaracijose:
klasėorderLineItem{
_LineItemID = 0;
_Produktas = {};
_Kiekis = 1;konstruktorius(produktas) {
tai._LineItemID = crypto.randomUUID();
tai._Produktas = produktas
}
changeLineItemQuantity = (naujasKv) => {
tai._Kiekis = newQty;
}
}
Rodyklės funkcijos naudojimas metodams deklaruoti klasės deklaracijoje nekeičia funkcijos elgesio klasėje. Tačiau už klasės ribų ji atskleidžia funkciją, todėl ją gali naudoti kitos klasės.
Įprastų funkcijų negalima pasiekti už klasės deklaracijos ribų jų neiškvietus. Tai reiškia, kad nors kitos klasių deklaracijos gali paveldėti šias funkcijas, jos negali būti tiesiogiai pasiekiamos kuriant kitas klases.
Kada turėtumėte naudoti „JavaScript“ rodyklių funkcijas?
„JavaScript“ rodyklės funkcijos yra neįtikėtinai galinga funkcija, kuri suteikia kūrėjams daug daugiau galimybių valdyti, kokią apimtį funkcija gali pasiekti. Žinodami, kada atgalinis skambutis turėtų turėti prieigą prie pirminės apimties, o kada ne, kūrėjui gali padėti nustatyti, kokio tipo deklaraciją naudoti.
Rodyklės funkcijos suteikia programuotojams aiškų ir glaustą būdą rašyti atgalinius skambučius neatskleidžiant apimties dalių, kurios turėtų būti paslėptos. Jie taip pat leidžia kurti švarias ir paprastas kompozicijas, dar labiau įgalinant funkcinį programavimą JavaScript.
JS kūrėjai turi žinoti apie dviejų sintaksių skirtumus ir deklaruodami savo funkcijas atsižvelgti į tai, kuri sintaksė yra tinkama.