Scopes 🪟
In der Programmierung gibt es an sich nicht besonders viele verschiedene Konstrukte — mit Variablen, Conditionals, Operatoren und Loops hast du bereits einen Großteil kennengelernt. Trotzdem lassen sich mit so wenigen Konstrukten beliebig komplexe Probleme lösen. Es gibt mehrere Mechanismen, die das ermöglichen. Einer davon sind Scopes.
Lokale Variablen
Immer wenn du in JavaScript eine geschweifte Klammer { aufmachst, öffnest du
gleichzeitig einen neuen Scope. Die nächste schließende geschweifte Klammer
} schließt diesen Scope wieder.
Ein Scope ist ein Bereich des Codes, in dem neu angelegte Variablen “leben”. Variablen, die innerhalb eines Scopes angelegt werden, werden am Ende des Scopes wieder verworfen:
Probier es aus: entferne das // vor console.log(b) und schau dir die
Fehlermeldung an. Der Fehler heißt sowas wie b is not defined — klar, weil b
außerhalb seines Scopes nicht existiert.
Dasselbe gilt auch innerhalb von else- oder while-Blöcken — eben immer
innerhalb von {}. Das bedeutet, dass wir innerhalb von {} eigene kleine
Variablen für Zwischenergebnisse und lokale Lösungswege anlegen können — und
klar markieren, dass sie nur lokal relevant sind und außerhalb davon nicht
beachtet werden müssen (und auch nicht können).
Es wird komplexer
Inwiefern erlauben Scopes es uns, komplexere Probleme mit simplen Konstrukten zu
lösen? Mit einem Verständnis von Scopes können wir verschiedene Konstrukte (wie
while und if) ineinander verschachteln und die dafür benötigten Variablen
in möglichst “engen” (also möglichst kurz lebenden) Scopes anlegen, um die
Übersicht zu behalten.
Als Beispiel: ein Programm, das alle Primzahlen unter 30 findet, mit zwei
verschachtelten while-Schleifen. Eine Primzahl ist eine Zahl, die nur durch
1 und durch sich selbst teilbar ist — wir prüfen also für jede Zahl, ob es
einen Teiler kleiner als sie selbst gibt.
⚠️ Falls du noch nie verschachtelte Schleifen gesehen hast: nimm dir Zeit, lies die Kommentare, ändere Werte und beobachte, was passiert. Versuch im Kopf durchzuspielen, was bei
n = 4undmaybeTeiler = 2passiert.
Wichtig: isPrim und maybeTeiler werden bei jedem Durchlauf der äußeren
Schleife neu angelegt. Sobald die innere Schleife durch ist, kann der Code
auf sie zugreifen, weil sie im gleichen (äußeren) Scope leben.
Geschafft! 🚀
Du verstehst jetzt:
- Geschweifte Klammern öffnen einen neuen Scope.
- Lokale Variablen existieren nur in ihrem Scope.
- Scopes können verschachtelt sein — der innere Scope sieht den äußeren, aber nicht umgekehrt.
Als Nächstes: Functions →