Hur gör stängningar privata variabler möjliga i JavaScript?

Att kunna implementera privata variabler och metoder är till stor hjälp för att begränsa åtkomsten till kod. Genom att göra en variabel privat begränsar den mängden kod som kan mutera den. Det finns flera sätt att implementera privata variabler och metoder i JavaScript. Ett av dessa sätt är att använda stängningar.

Vad är en stängning?

En stängning är kombinationen av en funktion buntad med dess omgivande tillstånd. Det betyder att vi kan komma åt omfattningen där funktionen är definierad, inifrån den funktionen. Låt oss titta på ett enkelt exempel:

Här har vi en yttre funktion add och en inre funktion addFive . Tilldelar add till en variabel returnerar den inre funktionen addFive .

Att anropa variabeln och skicka ett nummer kommer att exekvera addFive . Till en början verkar den ha tillgång till x borde inte vara möjligt eftersom x tillhör omfattningen av den yttre funktionen som redan har körts klart. Men eftersom funktionen addFive bildar en stängning har den också tillgång till den miljö eller omfattning i vilken den deklarerades (även känd som den lexikaliska miljön).

Om en funktion bildar en stängning kan den komma åt variabler och funktioner som deklarerats i den överordnade/yttre funktionen även efter att den överordnade/yttre funktionen avslutats. Denna princip tillåter oss att implementera privata variabler.

Implementering av privata variabler

I JavaScript är privata variabler inte inbyggda tillgängliga. Men eftersom vi vet hur stängningar fungerar kan vi efterlikna dem.

Detta exempel tillämpar konceptet vi tittade på i föregående avsnitt. En IIFE(Omedelbart anropad funktionsuttryck) tilldelas konstanten Door . IIFE körs omedelbart och returnerar ett objekt med två metoder. Detta returnerade objekt har en funktion och en variabel i sin lexikala miljö.

IIFE avslutar exekvering, så variabeln och funktionen är båda otillgängliga från utsidan. Endast de två metoderna inuti det returnerade objektet kan komma åt dem eftersom de bildar stängningar.