"Omfattning" hänvisar till den aktuella kontexten för exekvering där din kod kan referera till eller "se" värden och uttryck. Variabler, objekt och funktioner från olika delar av koden är tillgängliga baserat på deras omfattning.

I JavaScript kan variabler, objekt och funktioner ha ett globalt omfattning, ett modulomfång, ett blockomfång eller ett funktionsomfång.

Global Scope i JavaScript

Alla värden som deklareras utanför en funktion eller ett block i ett skript har ett globalt omfång och alla andra skriptfiler i ditt program kan komma åt det.

Till exempel, deklarera en global variabel i en fil:

// index.js
låt globalVariable = "något värde"

Betyder att alla andra skript i ditt program kan komma åt det:

// OtherScript.js
trösta.log (globalVariable) // något värde

Deklarera JavaScript-variabler i den globala omfattningen är dålig praxis eftersom det kan leda till förorening av namnutrymmet. Det globala namnutrymmet är det övre utrymmet i Javascript som innehåller variablerna, objekten och funktionerna. I en webbläsare kopplas den till

instagram viewer
Fönster objekt, medan NodeJS använder ett objekt med namnet global.

Att förorena det globala namnområdet kan leda till namnkollision. Det här är en situation där din kod försöker använda samma variabelnamn för olika saker i samma namnområde. Namnkollisioner uppstår ofta i stora projekt som använder flera tredjepartsbibliotek.

Modulomfattning

En modul är en fristående fil som kapslar in och exporterar bitar av kod för andra moduler i ett projekt att använda. Det låter dig organisera och underhålla din kodbas mer effektivt.

ES-moduler formaliserade JavaScript-modulmönstret i JavaScript 2015.

Variabler som du deklarerar i en modul omfattas av den modulen, vilket innebär att ingen annan del av programmet kan komma åt dem.

Du kan bara använda en variabel som deklareras i en modul utanför den om modulen exporterar den variabeln med hjälp av exportera nyckelord. Du kan sedan importera det namnet till en annan modul med hjälp av importera nyckelord.

Här är ett exempel som visar exporten av en klass:

// index.js
exporteraklassFoo{
konstruktör(egendom_1, egenskap_2) {
detta.property_1 = egenskap_1
detta.property_2 = egenskap_2
}
}

Och så här kan du importera den modulen och använda egenskapen som den exporterar:

// someModule.js
importera { Foo } från './index.js'

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

trösta.log (bar.property_1) // foo

Filer deklareras inte som moduler som standard i JavaScript.

I JavaScript på klientsidan kan du deklarera ett skript som en modul genom att ställa in typ tillskriva modulmanus märka:

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

I NodeJS kan du deklarera ett skript som en modul genom att ställa in typ egendom till modul i ditt package.json fil:

{
"typ": "modul"
}

Block Omfattning

Ett block i JavaScript är där ett par lockiga hängslen börjar och slutar.

Variabler som deklareras inom ett block med låta, och konst nyckelord är inriktade på det blocket, vilket innebär att du inte kan komma åt dem utanför det. Detta omfång gäller inte för variabler som deklareras med hjälp av var nyckelord:

{ // Början av blocket
konst ett = '1'
låt två = '2'
var tre = '3'
} // Slutet på blocket

trösta.log (ett) // kastar fel

trösta.log (tre) // "3"

Variablerna som är inneslutna i blocket ovan och deklareras som const eller let är endast tillgängliga inuti blocket. Du kan dock komma åt variabeln som deklareras med hjälp av var nyckelord utanför blocket.

Funktion Omfattning

Variabler som deklareras inuti en funktion kallas vanligtvis lokala variabler och omfångas till funktionen. Du kan inte komma åt dem utanför funktionen. Detta omfång gäller för variabler som deklareras med var, låta, och konst nyckelord.

Eftersom variabler som deklareras i en funktion är lokala för funktionen, kan variabelns namn återanvändas. Återanvändning av funktionsomfattade variabelnamn kallas variabel skuggning, och den yttre variabeln sägs vara "skuggad".

Till exempel:

fungeramultiplicera() {
låta en = 1
var två = 2
konst tre = 3

lämna tillbaka ett två tre
}

// Variabel skuggning
konst tre = 'tre' // Ger inget fel

En förståelse för omfattningsregler är avgörande

Att ha ett grepp om de tillgängliga omfattningarna i JavaScript gör det lättare för dig att undvika fel. Att försöka komma åt en variabel som inte är tillgänglig i ett visst omfång är en mogen källa till buggar.

En förståelse av räckvidd involverar också begrepp som globala namnutrymmesföroreningar, vilket kan göra din kod mer benägen att bli buggar.