Scope Findings - wongsrila/intern-match GitHub Wiki

Scope is de toegankelijkheid van variabelen, functies en objecten in een bepaald deel van de code tijdens runtime. Met andere woorden, scope bepaalt de zichtbaarheid van variabelen en andere bronnen in delen van de code.

if (true) {
    const message = 'hello';
    message; // => hello
}

message; // referenceError

Waarom bestaan er scopes?

Waarom zou je de zichtbaarheid van variabelen beperken en niet alles gewoon overal in de code beschikbaar maken? Een voordeel is dat het scope een bepaald niveau van beveiliging voor de code biedt. Een veelgebruikt principe van computerbeveiliging is dat gebruikers alleen toegang mogen hebben tot de dingen die ze nodig hebben.

Scope in JavaScript

In JavaScript heb je twee soorten scopes:

  • globale scope
  • lokale scope

Variabelen die binnen een functie zijn gedefinieerd, bevinden zich in het lokale scope, terwijl variabelen die buiten een functie zijn gedefinieerd, zich in het globale scope bevinden. Elke functie die wordt aangeroepen, creëert een nieuw scope

Globale Scope

// de scope is standaard globaal
var name = 'First';

Variabelen binnen het Globale scope kunnen worden geopend en gewijzigd in elk ander scope.

var name = 'First';

console.log(name); // logt 'First'

function logName() {
    console.log(name); // 'name' is hier beschikbaar maar ook andere op andere plekken
}

logName(); // logt 'First'

Lokale scope

Variabelen die binnen een functie zijn gedefinieerd, bevinden zich in het lokale scope. Ze hebben een ander scope voor elke aanroep van die functie. Dit betekent dat variabelen met dezelfde naam in verschillende functies kunnen worden gebruikt. Dit kan omdat ze in verschillende scopes zitten.

// Globale Scope
function someFunction() {
    // Lokale Scope #1
    function someOtherFunction() {
        // Lokale Scope #2
    }
}

Block Statements

Block statements zoals if en switch conditions of for en while-loops maken, in tegenstelling tot functies, geen nieuwe scope. Variabelen die binnen een Block statements zijn gedefinieerd, blijven binnen het scope waarin ze zich al bevonden.

var maakt geen nieuwe scope. let en const maken wel een lokale scope:

if (true) {
    // this 'if' conditional block doesn't create a scope

    // name is in the global scope because of the 'var' keyword
    var name = 'Hammad';
    // likes is in the local scope because of the 'let' keyword
    let likes = 'Coding';
    // skills is in the local scope because of the 'const' keyword
    const skills = 'JavaScript and PHP';
}

console.log(name); // logs 'Hammad'
console.log(likes); // Uncaught ReferenceError: likes is not defined
console.log(skills); // Uncaught ReferenceError: skills is not defined

Bronnen

Pavlutin, D. (2020, 24 april). A Simple Explanation of Scope in JavaScript. Dmitri Pavlutin Blog. https://dmitripavlutin.com/javascript-scope/

Ahmed, H. (2019, 8 juli). Understanding Scope in JavaScript. Scotch. https://scotch.io/tutorials/understanding-scope-in-javascript