"Omfang" refererer til gjeldende kontekst for utførelse der koden din kan referere til eller "se" verdier og uttrykk. Variabler, objekter og funksjoner fra ulike deler av koden er tilgjengelige basert på deres omfang.
I JavaScript kan variabler, objekter og funksjoner ha et globalt omfang, et modulomfang, et blokkomfang eller et funksjonsomfang.
Globalt omfang i JavaScript
Enhver verdi som er deklarert utenfor en funksjon eller en blokk i et skript har et globalt omfang, og alle andre skriptfiler i programmet kan få tilgang til den.
For eksempel, erklære en global variabel i én fil:
// index.js
la globalVariable = "noen verdi"
Betyr at ethvert annet skript i programmet kan få tilgang til det:
// otherScript.js
konsoll.log (globalVariable) // noen verdi
Erklærer JavaScript-variabler i det globale omfanget er dårlig praksis fordi det kan føre til forurensning av navneområdet. Det globale navnerommet er det øverste rommet i Javascript som inneholder variablene, objektene og funksjonene. I en nettleser kobles den til Vindu objekt, mens NodeJS bruker et objekt med navn global.
Å forurense det globale navneområdet kan føre til navnekollisjon. Dette er en situasjon der koden din prøver å bruke samme variabelnavn for forskjellige ting i samme navneområde. Navnekollisjoner oppstår ofte i store prosjekter som bruker flere tredjepartsbiblioteker.
Modulomfang
En modul er en frittstående fil som innkapsler og eksporterer kodebiter som andre moduler i et prosjekt kan bruke. Den lar deg organisere og vedlikeholde kodebasen din mer effektivt.
ES-moduler formalisert JavaScript-modulmønsteret i JavaScript i 2015.
Variabler som du deklarerer i en modul er scoped til den modulen, noe som betyr at ingen andre deler av programmet har tilgang til dem.
Du kan bare bruke en variabel deklarert i en modul utenfor den hvis modulen eksporterer den variabelen ved hjelp av eksport nøkkelord. Du kan deretter importere det navnet til en annen modul ved å bruke import nøkkelord.
Her er et eksempel som viser eksporten av en klasse:
// index.js
eksportklasseFoo{
konstruktør(eiendom_1, eiendom_2) {
dette.property_1 = eiendom_1
dette.property_2 = eiendom_2
}
}
Og her er hvordan du kan importere den modulen og bruke egenskapen den eksporterer:
// someModule.js
import { Foo } fra './index.js'const bar = ny Foo('foo', 'bar')
konsoll.log (bar.property_1) // foo
Filer er ikke erklært som moduler som standard i JavaScript.
I JavaScript på klientsiden kan du erklære et skript som en modul ved å angi type tilskrive modul på manus stikkord:
<skripttype="modul" src="index.js"></script>
I NodeJS kan du erklære et skript som en modul ved å sette type eiendom til modul i din package.json fil:
{
"type": "modul"
}
Block Scope
En blokk i JavaScript er der et par krøllete seler starter og slutter.
Variabler deklarert innenfor en blokk med la, og konst nøkkelord er scoped til den blokken, noe som betyr at du ikke kan få tilgang til dem utenfor den. Dette omfanget gjelder ikke for variabler deklarert ved hjelp av var nøkkelord:
{ // Begynnelsen av blokken
konst en = '1'
la to = '2'
var tre = '3'
} // Slutt på blokkkonsoll.log (én) // kaster feil
konsoll.log (tre) // "3"
Variablene som er vedlagt i blokken ovenfor og erklært som const eller let er kun tilgjengelige inne i blokken. Du kan imidlertid få tilgang til variabelen som er deklarert ved å bruke var nøkkelord utenfor blokken.
Funksjon Omfang
Variabler som er deklarert inne i en funksjon blir ofte referert til som lokale variabler og er scoped til funksjonen. Du kan ikke få tilgang til dem utenfor funksjonen. Dette omfanget gjelder for variabler deklarert med var, la, og konst søkeord.
Siden variabler som er deklarert i en funksjon er lokale for funksjonen, kan variabelens navn gjenbrukes. Gjenbruk av funksjonsomfangede variabelnavn er kjent som variabel skyggelegging, og den ytre variabelen sies å være "skyggelagt".
For eksempel:
funksjonmultiplisere() {
la en = 1
var to = 2
konst tre = 3komme tilbake en to tre
}
// Variabel skyggelegging
konst tre = 'tre' // Gir ikke en feil
En forståelse av avgrensningsreglene er avgjørende
Å ha et grep om tilgjengelige omfang i JavaScript gjør det lettere for deg å unngå feil. Å prøve å få tilgang til en variabel som ikke er tilgjengelig i et bestemt omfang, er en moden kilde til feil.
En forståelse av omfang involverer også konsepter som global forurensning av navneområder, som kan gjøre koden din mer utsatt for feil.