"Scope" verwijst naar de huidige context van uitvoering waarin uw code kan verwijzen naar of "zien" van waarden en uitdrukkingen. Variabelen, objecten en functies uit verschillende delen van de code zijn toegankelijk op basis van hun bereik.

In JavaScript kunnen variabelen, objecten en functies een globaal bereik, een modulebereik, een blokbereik of een functiebereik hebben.

Wereldwijd bereik in JavaScript

Elke waarde die buiten een functie of een blok in een script wordt gedeclareerd, heeft een globaal bereik en elk ander scriptbestand in uw programma heeft er toegang toe.

Bijvoorbeeld, een globale variabele declareren in één bestand:

// index.js
laat globalVariable = "enige waarde"

Betekent dat elk ander script in uw programma er toegang toe heeft:

// otherScript.js
troosten.log (globalVariabele) // enige waarde

JavaScript-variabelen declareren in de wereldwijde scope is een slechte gewoonte omdat het kan leiden tot vervuiling van de naamruimte. De globale naamruimte is de bovenste ruimte van Javascript die de variabelen, objecten en functies bevat. In een browser hecht het zich aan de

instagram viewer
Venster object, terwijl NodeJS een object gebruikt met de naam globaal.

Het vervuilen van de globale naamruimte kan leiden tot een naambotsing. Dit is een situatie waarin uw code dezelfde variabelenaam probeert te gebruiken voor verschillende dingen in dezelfde naamruimte. Naambotsingen komen vaak voor in grote projecten die gebruikmaken van verschillende bibliotheken van derden.

Modulebereik

Een module is een op zichzelf staand bestand dat stukjes code inkapselt en exporteert voor gebruik door andere modules in een project. Hiermee kunt u uw codebase efficiënter organiseren en onderhouden.

ES-modules geformaliseerd het patroon van de JavaScript-module in JavaScript in 2015.

Variabelen die u in een module declareert, vallen onder die module, wat betekent dat geen enkel ander deel van het programma er toegang toe heeft.

U kunt alleen een variabele gebruiken die is gedeclareerd in een module daarbuiten als de module die variabele exporteert met de exporteren trefwoord. U kunt die naam vervolgens in een andere module importeren met behulp van de importeren trefwoord.

Hier is een voorbeeld dat de export van een klasse laat zien:

// index.js
exporterenklasFoo{
constructeur(property_1, property_2) {
deze.property_1 = eigenschap_1
deze.property_2 = eigenschap_2
}
}

En zo kunt u die module importeren en de eigenschap gebruiken die deze exporteert:

// someModule.js
importeren { Foo } van './index.js'

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

troosten.log (bar.property_1) // foo

Bestanden worden niet standaard als modules gedeclareerd in JavaScript.

In client-side JavaScript kunt u een script als module declareren door de type toeschrijven aan module op de script label:

<scripttype="module" src="index.js"></script>

In NodeJS kun je een script als module declareren door de type eigendom aan module in uw pakket.json het dossier:

{
"type": "module"
}

Bereik blokkeren

Een blok in JavaScript is waar een paar accolades beginnen en eindigen.

Variabelen gedeclareerd binnen een blok met de laten, en const trefwoorden vallen binnen dat blok, wat betekent dat u ze daarbuiten niet kunt openen. Dit bereik is niet van toepassing op variabelen die zijn gedeclareerd met de var trefwoord:

{ // Begin van blok
const één = '1'
laat twee = '2'
var drie = '3'
} // Einde van blok

troosten.log (één) // gooit fout

troosten.log (drie) // "3"

De variabelen die in het bovenstaande blok zijn ingesloten en als const of let zijn gedeclareerd, zijn alleen toegankelijk binnen het blok. U kunt echter toegang krijgen tot de gedeclareerde variabele met behulp van de var trefwoord buiten het blok.

Functieomvang:

Variabelen die binnen een functie worden gedeclareerd, worden gewoonlijk lokale variabelen genoemd en vallen onder de functie. Je hebt er geen toegang toe buiten de functie. Dit bereik is van toepassing op variabelen die zijn gedeclareerd met de var, laten, en const trefwoorden.

Aangezien variabelen die in een functie worden gedeclareerd, lokaal zijn voor de functie, kunnen de namen van de variabelen opnieuw worden gebruikt. Het hergebruiken van variabelenamen met een functiebereik staat bekend als variabele schaduwen, en de buitenste variabele wordt "geschaduwd" genoemd.

Bijvoorbeeld:

functievermenigvuldigen() {
laten een = 1
var twee = 2
const drie = 3

opbrengst een twee drie
}

// Variabele schaduwwerking
const drie = 'drie' // Geeft geen fout

Een goed begrip van scopingregels is van vitaal belang

Als u de beschikbare scopes in JavaScript begrijpt, kunt u gemakkelijker fouten voorkomen. Proberen toegang te krijgen tot een variabele die niet beschikbaar is in een bepaald bereik, is een rijpe bron van bugs.

Een goed begrip van de reikwijdte omvat ook concepten zoals wereldwijde vervuiling van de naamruimte, waardoor uw code vatbaarder kan worden voor bugs.