# Scope
De scope is een belangrijk concept in JavaScript. Het is de context waarin een variabele is gedeclareerd en het gebied waarin deze kan worden aangesproken en gebruikt.
Variabelen die buiten een functie of block zijn gedeclareerd, staan bekend als globale variabelen en kunnen overal in het programma worden aangesproken. Variabelen die binnen een functie of block zijn gedeclareerd, staan bekend als lokale variabelen en kunnen alleen binnen die functie worden aangesproken.
Er zijn twee soorten scope in JavaScript:de globale scope en de lokale scope.
- Globale scope verwijst naar variabelen die buiten een functie of block zijn gedeclareerd en overal in het programma kunnen worden aangesproken.
- Lokale scope verwijst naar variabelen die binnen een functie of block zijn gedeclareerd en alleen binnen die functie of block kunnen worden aangesproken.
# Globale Scope
In dit voorbeeld hebben we een globale variabele genaamd “message” gedeclareerd. Deze variabele kan overal in het programma worden aangesproken.
let message = "Hallo Wereld!";
function zegHallo() {
console.log(message);
message = "Vaarwel Wereld!";
}
zegHallo(); // Hallo Wereld!
2
3
4
5
6
7
8
In dit voorbeeld zien we dat de globale variabele “message” toegankelijk is vanuit de functie. We zien ook dat de waarde van de globale variabele binnen de functie kan worden gewijzigd.
# Lokale Scope
In dit voorbeeld hebben we een lokale variabele genaamd “message” gedeclareerd. Deze variabele kan alleen worden aangesproken binnen de functie waarin deze is gedeclareerd.
function zegHallo() {
let message = "Hallo Wereld!";
console.log(message);
message = "Vaarwel Wereld!";
}
zegHallo(); // Hallo wereld
console.log(message); // ReferenceError: message is not defined
2
3
4
5
6
7
8
# Nested functions
Een geneste functie is een functie in een functie. De geneste functie is ‘private’ wat betekent dat deze niet kan aangesproken worden buiten de parent functie.
function outerFunction() {
let outerVariable = "Ik ben buiten!";
function innerFunction() {
let innerVariable = "Ik ben binnen!";
console.log(outerVariable); // Toegang tot de variabele van de buitenste functie
console.log(innerVariable); // Toegang tot de eigen variabele
}
innerFunction(); // Roept de binnenste functie aan
console.log(innerVariable); // ReferenceError: innerVariable is not defined
}
2
3
4
5
6
7
8
9
10
11
12
Variabelen die in een functie zijn gemaakt, kunnen alleen daar worden gebruikt. Maar een functie kan wel alles gebruiken wat in dezelfde scope is als zichzelf.
Dus als een functie in een bepaalde scope is gemaakt, kan deze alles gebruiken wat ook in dezelfde scope is gemaakt. Concreet betekent dit dat: Als we een functie in een andere functie maken, kan deze binnenste functie alles gebruiken wat de buitenste functie kan gebruiken.
# Parameter Scope
# Primitieve waarden als argument
Wanneer we als argument een primitieve waarde gebruiken, wordt een kopie van de waarde van de variabele doorgegeven aan de functie, niet de originele variabele zelf. Wanneer de waarde wordt aangepast van dit argument binnen in een functie, dan zal de waarde slechts lokaal en dus niet globaal aangepast worden.
function doubleNumber(number) {
number = number * 2;
console.log("Binnen de functie:", number); // 10
}
let originalNumber = 5;
doubleNumber(originalNumber);
console.log("Buiten de functie:", originalNumber); // 5
2
3
4
5
6
7
8
9
# Niet-primitieve of referentie waarden als argument
Wanneer we als argument een niet-primitieve of referentie waarde gebruiken, geven we de referentie van de variabele door aan de functie en wordt er geen kopie gemaakt. Hierdoor zullen aanpassingen van dit argument binnen in een functie, de eigenlijke waarde van deze referentie gaan aanpassen.
function doubleNumber(obj) {
obj.number = obj.number * 2;
console.log("Binnen de functie:", obj.number); // 10
};
let originalObject = {
number: 5,
};
doubleNumber(originalObject);
console.log("Buiten de functie:", originalObject); // {number: 10}
2
3
4
5
6
7
8
9
10
11