JavaScript
Scope - hvor en variabel findes
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.
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.
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
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.
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 definedbetyder som regel forkert scope eller stavefejl.- Skriv altid
letellerconst, så du ikke laver globale variabler ved et uheld.
Læs videre
- Funktioner i JavaScript Funktioner i JavaScript forklaret på dansk: parametre, return og kald. Med eksempler du kan køre, og forklaringen på hvorfor din funktion giver undefined.
- let og const Forskellen på let og const i JavaScript, forklaret på dansk med eksempler. Hvornår du bruger hvad, og hvorfor const stadig kan ændres indeni.
Senest gennemgået .