JavaScript ir viena no sarežģītākajām programmēšanas valodām. Dažreiz pat vecākie izstrādātāji nespēj paredzēt rakstītā koda izvadi. Viens no mulsinošākajiem JavaScript jēdzieniem ir slēgšana. Iesācēji parasti aizķeras pie šīs koncepcijas — neuztraucieties. Šajā rakstā lēnām tiks parādīti pamata piemēri, lai palīdzētu labāk izprast slēgšanu. Sāksim.
Kas ir slēgšanas?
Slēgšana ir funkcijas struktūra un tās leksiskā vide, ieskaitot jebkurus funkcijas darbības jomas mainīgos slēgšanas izveides brīdī. Vienkāršāk sakot, apsveriet ārējo funkciju un iekšējo funkciju. Iekšējai funkcijai būs piekļuve ārējās funkcijas darbības jomai.
Pirms aplūkot dažus JavaScript slēgšanas piemērus, jums ir jāsaprot leksiskā tvērums.
Kas ir leksiskā vide?
Leksiskā vide ir lokālā atmiņa kopā ar tās vecāku vidi. Apskatiet tālāk sniegto piemēru un uzminiet šāda koda izvadi:
function outer(){
pieņemsim, ka a = 10;
console.log (y);
iekšējais ();
function inner(){
console.log (a);
console.log (y);
}
}
pieņemsim, ka y = 9;
ārējais ();
Iznākums būs 9, 10, 9. Iekšējai funkcijai ir piekļuve tās vecāku mainīgajiem lielumiem ārējais () funkcija. Tādējādi, iekšējais () funkcija var piekļūt mainīgais a. The iekšējais () var piekļūt arī funkcijai mainīgais y jēdziena dēļ tvēruma ķēde.
Ārējās funkcijas vecākais ir globāls, bet vecākais iekšējais () funkcija ir ārējais () funkcija. Tādējādi, iekšējais () funkcijai ir piekļuve savu vecāku mainīgajiem lielumiem. Ja mēģināt piekļūt mainīgajam a globālajā mērogā tas parādīs kļūdu. Līdz ar to var teikt, ka iekšējais () funkcija leksiski atrodas iekšā ārējais () funkcija un leksiskais vecākais ārējais () funkcija ir globāla.
Izskaidroti JavaScript slēgšanas piemēri
Tā kā esat uzzinājis par leksisko vidi, varat viegli uzminēt šāda koda izvadi:
funkcija a(){
pieņemsim, ka x = 10;
funkcija b(){
console.log (x);
}
b();
}
a();
Izvade ir 10. Lai gan no pirmā acu uzmetiena jūs to nevarat uzminēt, šis ir JavaScript aizvēršanas piemērs. Slēgšana ir nekas vairāk kā funkcija un to leksiskā vide.
Apskatīsim piemēru, kur ir trīs viena otrai ligzdotas funkcijas:
funkcija a(){
pieņemsim, ka x = 10;
funkcija b(){
funkcija c(){
funkcija d(){
console.log (x);
}
d();
}
c();
}
b();
}
a();
Vai to joprojām sauks par slēgšanu? Atbilde ir: jā. Atkal, slēgšana ir funkcija ar tās leksisko vecāku. Funkcijas leksiskais vecākais d() ir c(), un tvēruma ķēdes, funkcijas jēdziena dēļ d() ir piekļuve visiem ārējo un globālo funkciju mainīgajiem.
Apskatiet vēl vienu interesantu piemēru:
funkcija x(){
pieņemsim, ka a = 9;
atgriešanas funkcija y(){
console.log (a);
}
}
pieņemsim b = x();
Varat atgriezt funkciju funkcijā, piešķirt funkciju mainīgajam un nodot funkciju iekšā a funkcija JavaScript. Tas ir valodas skaistums. Vai varat uzminēt, kāda būs izvade, ja izdrukāsit mainīgo b? Tam būs drukāšanas funkcija y(). Funkcija x() atgriež funkciju y(). Tātad mainīgais b saglabā funkciju. Tagad, vai varat uzminēt, kas notiks, ja izsauksiet mainīgo b? Tas izdrukā mainīgā vērtību a: 9.
Varat arī panākt datu slēpšanu, izmantojot slēgšanu. Lai labāk izprastu, apsveriet piemēru ar pogu, kurai pārlūkprogrammā ir ID ar nosaukumu "poga". Pievienosim tam klikšķu notikumu klausītāju.
Tagad jums ir jāaprēķina pogas noklikšķināšanas reižu skaits. Ir divi veidi, kā to izdarīt.
- Izveidojiet globālo mainīgo skaitu un palieliniet to, noklikšķinot. Bet šai metodei ir trūkumi. Ir viegli veikt izmaiņas globālajos mainīgajos, jo tie ir viegli pieejami.
- Mēs varam panākt datu slēpšanu, izmantojot slēgšanu. Jūs varat ietīt visu addEventListener() funkcija funkcijā. Tas padara slēgšanu. Un pēc aizvēršanas izveidošanas varat izveidot a skaitīšanas mainīgais un palielināt tā vērtību onclick. Izmantojot šo metodi, mainīgais paliks funkcionālais apjoms, un nekādas izmaiņas nevar veikt.
Saistīts: Vietņu slēptais varonis: DOM izpratne
Kāpēc slēgšana ir svarīga?
Slēgšana ir ļoti svarīga ne tikai attiecībā uz JavaScript, bet arī citās programmēšanas valodās. Tie ir noderīgi daudzos gadījumos, kad varat izveidot mainīgos to privātajā tvērumā vai apvienot funkcijas.
Apsveriet šo funkciju sastāva piemēru:
const reizināt = (a, b) => a*b;
const multiplyBy2 = x => reizināt (10, x);
console.log (multiplyBy2(9));
Mēs varam īstenot to pašu piemēru, izmantojot slēgšanu:
const reizināt = funkcija (a){
atgriešanas funkcija (b){
atgriezt a*b
}
}
const multiplyBy2 = reizināt (2);
console.log (multiplyBy2(10))
Funkcijas var izmantot slēgšanu šādos scenārijos:
- Lai īstenotu funkciju currying
- Izmanto datu slēpšanai
- Jāizmanto ar notikumu uztvērējiem
- Jāizmanto setTimeout metodē()
Nevajadzētu bez vajadzības izmantot aizdares
Ieteicams izvairīties no slēgšanas, ja vien tas nav patiesi nepieciešams, jo tas var pazemināt jūsu lietotnes veiktspēju. Slēgšanas izmantošana prasīs daudz atmiņas, un, ja aizvērumi netiks pareizi apstrādāti, tas var izraisīt atmiņas noplūdes.
JavaScript atkritumu savācējs neatbrīvos slēgtos mainīgos. Ja izmantojat mainīgos lielumus aizvērumos, atkritumu savācējs neatbrīvo atmiņu, jo pārlūkprogrammai šķiet, ka mainīgie joprojām tiek izmantoti. Tādējādi šie mainīgie patērē atmiņu un samazina lietotnes veiktspēju.
Šis ir piemērs, kas parāda, kā slēgšanā esošie mainīgie netiks savākti.
funkcija f(){
const x = 3;
atgriešanas funkcija inner(){
console.log (x);
}
}
f()();
The mainīgais x šeit tiek patērēta atmiņa, lai gan tā netiek bieži izmantota. Atkritumu savācējs nevarēs atbrīvot šo atmiņu, jo tā atrodas aizvēršanas iekšpusē.
JavaScript ir bezgalīgs
JavaScript apguve ir bezgalīgs uzdevums, jo ir tik daudz koncepciju un ietvaru, ko parasti paši pieredzējuši izstrādātāji neizpēta. Apgūstot pamatus un bieži tos praktizējot, varat ievērojami uzlabot savu JavaScript lietojumu. Iteratori un ģeneratori ir daži no jēdzieniem, kas intervijās tiek uzdoti JavaScript interviju laikā.
Apgūstiet iteratora un ģeneratora metodes JS.
Lasiet Tālāk
- Programmēšana
- JavaScript
- Programmēšana
- Kodēšanas padomi
Unnati ir entuziasma pilnas kaudzes izstrādātājs. Viņai patīk veidot projektus, izmantojot dažādas programmēšanas valodas. Brīvajā laikā viņa mīl spēlēt ģitāru un ir ēst gatavošanas entuziaste.
Abonējiet mūsu biļetenu
Pievienojieties mūsu informatīvajam izdevumam, lai saņemtu tehniskos padomus, pārskatus, bezmaksas e-grāmatas un ekskluzīvus piedāvājumus!
Noklikšķiniet šeit, lai abonētu