Starp abiem, izņemot sintakse, pastāv papildu atšķirības.

Tāpat kā gandrīz katra mūsdienu programmēšanas valoda, JavaScript piedāvā veidus, kā izveidot funkcijas, lai nodrošinātu koda atkārtotu izmantošanu. Tiem, kas nepārzina valodu, ir divi dažādi veidi, kā deklarēt funkciju JavaScript.

Sākotnēji, funkciju tika izmantots atslēgvārds, un vēlāk tika izveidota bultiņu sintakse. Lai gan tvēruma pieejamība atšķiras, gan funkcijas atslēgvārds, gan bultiņu sintakse rada līdzīgus rezultātus.

Nespēja atšķirt abus var radīt problēmas un novest pie nepareizas lietošanas. Mūsdienu JS izstrādātājam ir jāsaprot, kā katra funkcijas deklarācija ietekmē darbības jomu un redzamību.

Kādas ir JavaScript bultiņu funkcijas?

JavaScript bultiņas funkcijas ir alternatīvs veids, kā definēt funkcijas, kas neizmanto noklusējuma funkciju atslēgvārds:

funkcijulogZiņojums(ziņa) {
konsole.log (ziņa);
}

konst logMessage = (ziņa) => {
konsole.log (ziņa);
}

konst logMessage = ziņa =>konsole.log (ziņa);

Iepriekš jūs varat redzēt vienu un to pašu ziņojumu, kas rakstīts trīs dažādos veidos. Pirmais izmanto parasto funkciju deklarēšanas metodi. Nākamie divi parāda divus veidus, kā izmantot ES6 bultiņu funkcijas.

instagram viewer

JavaScript pirmo reizi pieņēma bultiņu funkcijas sintaksi, izlaižot ECMAScript 2015 standartus. Arrow funkcijas piedāvāja tīru un kodolīgu veidu, kā ātri izveidot funkcijas, un interesantu risinājumu vairākām ilgstošām tvēruma problēmām JavaScript.

Šīs funkcijas ātri padarīja bultiņu funkcijas par trāpījumu daudzu izstrādātāju vidū. Programmētāji, kas meklē modernu JavaScript kodu bāzi, tikpat labi var atrast bultiņu funkcijas kā parastās funkcijas.

Kā bultiņu funkcijas atšķiras no parastajām JavaScript funkcijām?

No pirmā acu uzmetiena šķiet, ka bultiņu funkcijas daudz neatšķiras no funkcijām, kas deklarētas, izmantojot funkcijas atslēgvārdu. Ārpus sintakses abas ietver atkārtoti lietojamu darbību kopu, ko var izsaukt no citas koda vietas.

Neskatoties uz līdzībām starp abiem, tomēr ir dažas atšķirības, kas izstrādātājiem ir jāapzinās.

Atšķirība darbības jomā

Ikreiz, kad JavaScript tiek deklarēta parasta funkcija, tas funkcija darbojas kā slēgšana, kas rada savu darbības jomu. Tas var radīt problēmas, izmantojot noteiktas specializētas funkcijas, piemēram, setTimeout un setInterval.

Pirms ES6 bija ievērojams skaits risinājumu, kas paaugstināja vienumus uz augstāku tvēruma līmeni, lai tos varētu izmantot atzvanīšanai. Šie uzlauzumi darbojās, taču tos bieži bija grūti saprast, un tie varēja radīt problēmas ar noteiktu mainīgo pārrakstīšanu.

Bultiņu funkcijas abas problēmas atrisināja vienkāršā un elegantā veidā. Ja bultiņas funkcija tiek izmantota kā daļa no atzvanīšanas, tai ir piekļuve tādam pašam tvērumam kā funkcijai, no kuras tā tika izsaukta.

Tas ļāva funkcijas izmantot kā atzvanīšanu, nezaudējot piekļuvi kontekstam, kurā tika izsaukts sākotnējais notikums. Kā vienkāršu testu, lai parādītu šī principa darbību, varat iestatīt aizkavētas ziņojumapmaiņas funkciju, piemēram, tālāk norādīto.

funkcijuaizkavēts ziņojums(ziņa, kavēšanās) {

setTimeout(funkciju(ziņa) {
konsole.log (ziņa);
}, kavēšanās);

}

delayedMessage("Sveika pasaule", 1000);

Funkcija ir vienkārša, pieņemama ziņa un kavēšanās milisekundēs. Kad aizkave ir pagājusi, tai ir jāreģistrē ziņojums konsolē. Tomēr, kad kods tiek izpildīts, nenoteikts tiks reģistrēts konsolē, nevis nosūtītais ziņojums.

Kad tiek izpildīta atzvanīšanas funkcija, darbības joma mainās un sākotnējais ziņojums vairs nav pieejams. Lai izmantotu ziņojumu no aizvēršanas, ziņojums ir jāpārvieto uz globālo mainīgo, kā rezultātā tas var tikt pārrakstīts pirms atzvanīšanas.

Bultiņas funkcija ir piemērots šīs problēmas risinājums. Ja aizstājat pirmo argumentu par setTimeout, tvērumu var saglabāt, un funkcijai būs piekļuve ziņojumam, kas nosūtīts aizkavēts ziņojums.

funkcijuaizkavēts ziņojums(ziņa, kavēšanās) {

setTimeout(() => {
konsole.log (ziņa);
}, kavēšanās);

}

delayedMessage("Sveika pasaule", 1000);

Tagad, kad tas tiek izpildīts, aizkavēts ziņojums funkcija reģistrēs ziņojumu. Turklāt tas ļauj rindā ievietot vairākus ziņojumus ar dažādu aizkavi, un tie visi joprojām tiks parādīti pareizajā laikā.

Tas ir saistīts ar to, ka katru reizi aizkavēts ziņojums tiek izmantots, tas ģenerē savu darbības jomu ar savu iekšējās bultiņas funkcijas kopiju.

Koda lasāmība

Lai gan bultiņu funkcijas ir noderīgas kā atzvanīšana, tās tiek izmantotas arī, lai kods būtu tīrs un kodolīgs. Iepriekš minētajā sadaļā varat redzēt, ka, izmantojot bultiņas funkciju, ir viegli saprast, kas notiks, kad aizkavēts ziņojums funkcija tiek izsaukta.

Tā kā funkcijas kļūst sarežģītākas, neliela skaidrība var padarīt kodu daudz lasāmāku. Veidojot objektus, tas var padarīt kodu vienkāršāku, pievienojot īsas funkcijas:

klasēskaitītājs{
_skaits = 0;
pieaugums = () => {
šis._count += 1;
}
samazinājums = () => {
šis._count -= 1;
}
skaits = () => {
atgrieztiesšis._count;
}
}

ļaut ct = jauns skaitītājs();

Loma objektorientētā programmēšanā

Lai gan JavaScript bultiņu funkcijas ir funkcionālās programmēšanas neatņemama sastāvdaļa, tām ir arī vieta objektorientētā programmēšana. Bultiņu funkcijas var izmantot klašu deklarācijās:

klasēorderLineItem{
_LineItemID = 0;
_Produkts = {};
_Daudzums = 1;

konstruktors(produkts) {
šis._LineItemID = crypto.randomUUID();
šis._Produkts = produkts
}

changeLineItemQuantity = (jaunsKv) => {
šis._Qty = newQty;
}
}

Bultiņas funkcijas izmantošana, lai deklarētu metodes klases deklarācijā, nemaina funkcijas darbību klasē. Tomēr ārpus klases tas atklāj funkciju, ļaujot to izmantot citām klasēm.

Parastajām funkcijām nevar piekļūt ārpus klases deklarācijas bez izsaukšanas. Tas nozīmē, ka, lai gan citas klašu deklarācijas var mantot šīs funkcijas, tām nevar tieši piekļūt, lai izveidotu citas klases.

Kad jums vajadzētu izmantot JavaScript bultiņu funkcijas?

JavaScript bultiņu funkcijas ir neticami spēcīgs līdzeklis, kas sniedz izstrādātājiem daudz lielāku kontroli pār to, kādai funkcijai ir piekļuve. Zinot, kad atzvanīšanai ir jābūt piekļuvei vecākvērtības jomai un kad nevajadzētu, izstrādātājam var palīdzēt noteikt, kāda veida deklarāciju izmantot.

Bultiņu funkcijas sniedz programmētājiem skaidru un kodolīgu veidu, kā rakstīt atzvanīšanas, neatklājot tvēruma daļas, kuras vajadzētu paslēpt. Tie arī ļauj izveidot tīras un vienkāršas kompozīcijas, vēl vairāk nodrošinot funkcionālu programmēšanu JavaScript.

JS izstrādātājiem ir jāapzinās atšķirības starp abām sintaksēm un jāņem vērā, kura sintakse ir piemērota, deklarējot savas funkcijas.