Hva er omfang og nedleggelse i JavaScript?

Hva er omfang og nedleggelse i JavaScript?
Når du først begynner JavaScript, kan du ha kommet over omfang og stenginger. Dette er veldig viktige konsepter å lære for en nybegynner. Selv i intervjuer spør intervjueren om nedleggelser.I dag skal vi diskutere hva omfang er og hva som er de grunnleggende begrepene om omfang i JavaScript. Etter å ha diskutert omfanget, vil vi gå mot nedleggelse og vil diskutere det. Mot slutten av denne artikkelen har du kunnskap om omfang og nedleggelse i JavaScript.

Før jeg begynner vil jeg foreslå at du ikke hopper direkte til stenging uten å forstå omfanget. Årsaken til dette er at for nedleggelseskonseptet er det veldig viktig å forstå omfangskonseptet.

omfang

Variablene du har tilgang til er omfanget av den variabelen og er delt inn i to deler:

Globalt omfang

Hvis en variabel er tilgjengelig gjennom hele programmet, har den globalt omfang. Med andre ord, vi kan si at hvis en variabel er utenfor alle funksjoner og krøllete seler, er det en global variabel og har et globalt omfang.

Et eksempel på globalt omfang i JavaScript er:

const globalName = "John Cena";

Nå som vi har erklært variabelen med navnet GlobalName, kan vi få verdien hvor som helst i koden, inkludert funksjoner/metoder.

For eksempel:

// Global variabel
const globalName = "John Cena";
// funksjon med navnet hilsen
funksjon hilsen ()
konsoll.Logg ("Hallo", GlobalName);

// kaller funksjonen hilsen
hilse på();
// tilgang til global variabel igjen utenfor funksjonen
konsoll.Logg ("Hello Again", GlobalName);

I dette eksemplet startet vi først en variabel med navnet på GlobalName. Etter det konstruerte vi en funksjon der vi hilste på det globale navnet. Da kalte vi funksjonen med denne uttalelsen hilse på(). Etter dette, vi konsoll.Logg de GlobalName variabel for å se om det er tilgjengelig utenfor funksjonen eller ikke. Utgangen vist i konsollen er:

Imidlertid må det huskes at de fleste programmerere ikke anbefaler å erklære en variabel globalt fordi det er en risiko for dupliserte variabelnavn mens du gjør det. Dupliserte variabelnavn oppstår når to variabler har samme navn. I de fleste tilfeller vil dette føre til en feil som vil være vanskelig å feilsøke.

Lokalt omfang

Som navnet antyder, har en lokal variabel et lokalt omfang. Det betyr at det bare er tilgjengelig i en funksjon/metode eller kodeblokk. Utenfor dette området er det ikke tilgjengelig og JavaScript vil generere en feil. Lokalt omfang i JavaScript er delt inn i to slag.

Funksjonsomfang

Hvis en variabel er deklarert i en funksjon, vil den bare være tilgjengelig innenfor den funksjonen og vil ikke være tilgjengelig utenfor den.

For eksempel:

// funksjon med navnet hilsen
funksjon hilsen ()
// lokal variabel
const localName = "Randy Orton";
konsoll.Logg ("Hallo", lokalt navn);

// kaller funksjonen hilsen
hilse på();
// tilgang til lokal variabel igjen utenfor funksjonen
// dette vil generere en feil
konsoll.Logg ("Hello Again", LocalName);

I dette eksemplet initierte vi et variabelt lokaltavn og deretter konsoll.Logg det. Dette vil vise oss utgangen fra "Randy Orton" I konsollloggen. Imidlertid når vi trøsser.Logg den lokale variabelen i den siste linjen, den vil generere en feil.

Produksjon:

Blokkomfang

Block Scope forteller oss at hvis vi erklærer en variabel innen krøllete parenteser, vil de krøllete parentesene være dets omfang. Det kalles et blokkomfang. Man har ikke tilgang til blokkeringsomfanget utenfor de krøllete seler.

For eksempel:


const name = "Rey Mysterio";
konsoll.Logg ("Hei", navn);

I dette eksemplet erklærte vi en variabel som har blokkomfang da det er inne i krøllete stag. Vi trøste det etterpå.

Utgangen av “Hei Rey Mysterio” sees i konsollloggen. Imidlertid, når vi konsollet logger det utenfor seler, vil det bli generert en feil.

Får funksjonen tilgang til et annet funksjonsomfang?

Som vi allerede diskuterte funksjonsomfang, la oss kaste lys over spørsmålet om to funksjoner deler et omfang eller ikke. Svaret er nei, hvis vi erklærer en variabel i en funksjon og prøver å få tilgang til den i en annen funksjon, vil det ikke være tilgjengelig.

For eksempel:

funksjon FirstMessage ()
const melding = "Jeg er første funksjon";
konsoll.logg ("tilgang fra første funksjon:", melding);

funksjon SecondMessage ()
FirstMessage ();
konsoll.logg ("tilgang fra andre funksjon", melding);

SecondMessage ();

I dette eksemplet konstruerte vi en funksjon med navnet på First Message og erklærte en variabel, hvoretter vi konsoll.Logg det. Etter det konstruerte vi en andre variabel og kalte First Message () -funksjonen. Det vil gå bra, og vi vil kunne se meldingen for konsollen fra First Message () -funksjonen. Imidlertid, når vi prøver å få tilgang til variabel -meldingen fra First Message () -funksjonen i SecondMessage () -funksjonen, vil vi se en feil.

Denne feilen løses ved stenginger.

Hva er nedleggelse i JavaScript?

Hvis du noen gang har opprettet en funksjon innen en annen funksjon, har du i utgangspunktet opprettet en nedleggelse. Innvendig funksjon kalles nedleggelse, og en mer teknisk definisjon vil være at en funksjon som har tilgang til overordnede funksjonsomfang selv når overordnede funksjonen er lukket, kalles en lukking.

La oss diskutere et eksempel på en nedleggelse:

funksjon parentFunc ()
La nameparent = "foreldre";
konsoll.logg (nameparent);
funksjon ChildFunc ()
konsoll.log ("barn og", nameparent);

Returner ChildFunc;

const Store = ParentFunc ();
konsoll.logg (butikk);
butikk();

I dette eksemplet konstruerte vi en Parentfunc og initierte en variabel NAMEPARENT. Etter det trakker vi oss.Logg NAMEPARENT og konstruerte en andre funksjon i overordnet funksjon I-E Childfunc. I denne barnefunksjonen trøser vi en streng "barn og" med NAMEPARENT -variabelen. Vi kan se at ParentFunc returnerer Childfunc. Når vi ringer ParentFunc -konsollloggen, vil vi bare vise oss NAMEPARENT. De Childfunc ble ikke kalt og kom ikke i aksjon. Imidlertid er utsiden og innsiden av funksjonen lagret inne i variabelbutikken. Når vi trøser for å logge butikken, vil vi se begge funksjonene. Når vi kaller butikk(), Vi kaller faktisk innsiden av funksjonen eller den anonyme funksjonen som er chidfunc inne i ParentFunc (). Nå vil vi se den indre funksjonskonsollen.Log I-E “Barn og foreldre”,

Stengingen vi opprettet lar oss også bruke omfanget av foreldrelegnet.

Konklusjon

I denne artikkelen diskuterte vi begrepene omfang og nedleggelse, og i omfang diskuterte vi de to hovedtypene av omfang som er: globalt omfang og lokalt omfang. Videre i lokalt omfang diskuterte vi funksjonelt omfang og blokkerer omfang sammen med eksempler. Etter det snublet vi over et problem som har tilgang til et annet funksjonsomfang. Vi løste dette ved hjelp av å diskutere nedleggelse sammen med eksempler.