Spring til indhold
Academi.dk

JavaScript

Scope - hvor en variabel findes

Let øvet DA↔EN-ordliste

Scope er det område i koden, hvor en variabel eksisterer. En variabel oprettet inde i krølleparenteser findes kun der, og forsvinder, når blokken er slut. Det er derfor, du kan få at vide, at noget ikke er defineret, selvom du tydeligt kan se linjen ovenfor.

Forudsætter, at du har set funktioner i javascript .

Krølleparenteserne er en væg

Hver gang du åbner en krølleparentes, i en funktion, en if, en løkke, laver du et nyt rum. Variabler, du opretter inde i rummet, findes kun der.

Eksempel
function beregn() {
const resultat = 42;
console.log(resultat);
}

beregn();
console.log(resultat);

Output

Tryk på “Kør koden”.

Første console.log virker. Den anden giver ReferenceError: resultat is not defined, fordi resultat blev født inde i funktionen og døde, da funktionen var færdig.

Det lyder som en begrænsning, men det er en af de vigtigste ting, der findes. Uden det ville hver variabel i et program kunne skrives over af hvilken som helst anden linje kode.

Man kan kigge udad, ikke indad

Inde fra et rum kan du se alt udenfor. Udefra kan du ikke se ind.

Eksempel
const moms = 0.25;

function medMoms(pris) {
return pris * (1 + moms);
}

console.log(medMoms(100));

Output

Tryk på “Kør koden”.

moms er oprettet udenfor og er derfor synlig inde i funktionen. Det er sådan, fælles værdier deles.

Løkkens tæller findes kun i løkken

Eksempel
for (let i = 0; i < 3; i++) {
console.log("inde: " + i);
}

console.log("ude: " + i);

Output

Tryk på “Kør koden”.

Det er endnu et tilfælde af den samme regel, og en fejl, man laver, når man vil bruge tælleren bagefter. Løsningen er at oprette en variabel før løkken og skrive til den indeni.

Samme navn to forskellige steder

To variabler med samme navn i to forskellige rum er to forskellige variabler. Den inderste “skygger” for den yderste.

Eksempel
const navn = "ude";

function vis() {
const navn = "inde";
console.log(navn);
}

vis();
console.log(navn);

Output

Tryk på “Kør koden”.

Det er lovligt, men det er sjældent en god idé. Når du læser koden en måned senere, skal du holde tungen lige i munden for at se, hvilken navn der er tale om.

Hvorfor det betyder noget for din opgave

Når en funktion kun kan se sine egne variabler og dem udenfor, kan du bruge den uden at kende dens indhold. Det er hele grunden til, at man kan dele et program op i funktioner og arbejde på dem hver for sig, og det er den samme tanke, der i andet semester bliver til indkapsling i objektorienteret programmering.

Kort opsamling

  • Krølleparenteser afgrænser, hvor en variabel findes.
  • Indefra kan du se ud; udefra kan du ikke se ind.
  • ReferenceError: … is not defined betyder som regel forkert scope eller stavefejl.
  • Skriv altid let eller const, så du ikke laver globale variabler ved et uheld.

Læs videre

Senest gennemgået .