"Omfang" refererer til den aktuelle udførelseskontekst, hvor din kode kan referere til eller "se" værdier og udtryk. Variabler, objekter og funktioner fra forskellige dele af koden er tilgængelige baseret på deres omfang.

I JavaScript kan variabler, objekter og funktioner have et globalt omfang, et modulomfang, et blokomfang eller et funktionsomfang.

Globalt omfang i JavaScript

Enhver værdi, der er erklæret uden for en funktion eller en blok i et script, har et globalt omfang, og enhver anden script-fil i dit program kan få adgang til den.

For eksempel at erklære en global variabel i én fil:

// index.js
lad globalVariable = "en vis værdi"

Betyder, at ethvert andet script i dit program kan få adgang til det:

// OtherScript.js
konsol.log (globalVariable) // nogen værdi

Erklæring af JavaScript-variabler i det globale omfang er dårlig praksis, fordi det kan føre til forurening af navneområder. Det globale navneområde er det øverste rum i Javascript, der indeholder variablerne, objekterne og funktionerne. I en browser knytter den sig til

instagram viewer
Vindue objekt, mens NodeJS bruger et objekt ved navn global.

Forurening af det globale navneområde kan føre til navnekollision. Dette er en situation, hvor din kode forsøger at bruge det samme variabelnavn til forskellige ting i det samme navneområde. Navnekollisioner opstår ofte i store projekter, der bruger flere tredjepartsbiblioteker.

Modulomfang

Et modul er en selvstændig fil, der indkapsler og eksporterer kodestykker, som andre moduler i et projekt kan bruge. Det giver dig mulighed for at organisere og vedligeholde din kodebase mere effektivt.

ES-moduler formaliseret JavaScript-modulmønsteret i JavaScript i 2015.

Variabler, som du erklærer i et modul, er omfattet af dette modul, hvilket betyder, at ingen anden del af programmet kan få adgang til dem.

Du kan kun bruge en variabel, der er erklæret i et modul uden for det, hvis modulet eksporterer denne variabel ved hjælp af eksport søgeord. Du kan derefter importere dette navn til et andet modul ved hjælp af importere søgeord.

Her er et eksempel, der viser eksporten af ​​en klasse:

// index.js
eksportklasseFoo{
konstruktør(ejendom_1, ejendom_2) {
dette.property_1 = ejendom_1
dette.property_2 = ejendom_2
}
}

Og her er, hvordan du kan importere det modul og bruge den egenskab, det eksporterer:

// someModule.js
importere { Foo } fra './index.js'

const bar = ny Foo('foo', 'bar')

konsol.log (bar.property_1) // foo

Filer er ikke erklæret som moduler som standard i JavaScript.

I JavaScript på klientsiden kan du erklære et script som et modul ved at indstille type tilskrive modul på den manuskript tag:

<script type="modul" src="index.js"></script>

I NodeJS kan du erklære et script som et modul ved at indstille type ejendom til modul i din package.json fil:

{
"type": "modul"
}

Blok omfang

En blok i JavaScript er, hvor et par krøllede seler starter og slutter.

Variabler erklæret inden for en blok med lade, og konst nøgleord er omfattet af denne blok, hvilket betyder, at du ikke kan få adgang til dem uden for den. Dette omfang gælder ikke for variabler, der er deklareret ved hjælp af var søgeord:

{ // Start af blok
konst en = '1'
lad to = '2'
var tre = '3'
} // Slut på blok

konsol.log (én) // kaster fejl

konsol.log (tre) // "3"

Variablerne indesluttet i blokken ovenfor og erklæret som const eller let er kun tilgængelige inde i blokken. Du kan dog få adgang til den erklærede variabel ved hjælp af var søgeord uden for blokken.

Funktionsomfang

Variabler, der er erklæret inde i en funktion, omtales almindeligvis som lokale variabler og er omfattet af funktionen. Du kan ikke få adgang til dem uden for funktionen. Dette anvendelsesområde gælder for variabler deklareret med var, lade, og konst søgeord.

Da variabler erklæret i en funktion er lokale for funktionen, kan variablens navne genbruges. Genbrug af funktionsbaserede variabelnavne er kendt som variabel skygge, og den ydre variabel siges at være "skygget".

For eksempel:

fungereformere sig() {
lade en = 1
var to = 2
konst tre = 3

Vend tilbage et to tre
}

// Variabel skygge
konst tre = 'tre' // Kaster ikke en fejl

En forståelse af scoping-reglerne er afgørende

At have et greb om de tilgængelige scopes i JavaScript gør det nemmere for dig at undgå fejl. At forsøge at få adgang til en variabel, der ikke er tilgængelig i et bestemt omfang, er en moden kilde til fejl.

En forståelse af omfang involverer også begreber som global forurening af navneområder, som kan gøre din kode mere udsat for fejl.