Welcher der folgenden ist das Gegenteil von lexikalischem Scoping?

Verständnis des dynamischen Scopings in der Programmierung

Im Kontext der Programmierung bedeutet Scoping den Sichtbarkeitsbereich oder den Kontext, in dem Variablen, Funktionen und Objekte definiert sind. Dieser Bereich bestimmt, von wo aus auf diese Variablen, Funktionen oder Objekte zugegriffen werden kann. Die Frage bezieht sich speziell auf das dynamische Scoping, das als Gegenteil des lexikalischen (oder statischen) Scopings definiert ist.

Dynamisches Scoping

Im Gegensatz zum lexikalischen Scoping, das auf der physischen Position der Variablen im Code basiert, basiert das dynamische Scoping auf dem Laufzeitaufruf der Funktionen oder Blöcken. Hier ist die Sichtbarkeit von Variablen abhängig vom Verlauf der Programmausführung. Das bedeutet, wenn eine Funktion oder ein Block ausgeführt wird und eine Variable sucht, schaut sie zuerst in ihrer eigenen Funktion oder ihrem Block. Wenn sie dort nicht gefunden wird, sucht das Programm in der Funktion oder im Block, die oder der die aktuell ausgeführte Funktion aufgerufen hat. Dies setzt sich fort, bis die Variable gefunden wird oder bis zu dem Punkt erreicht wird, wo das Programm gestartet wurde.

Beginnen wir mit einem einfachen Beispiel:

let var1 = "global";
function myFunction() {
let var1 = "local";
   function innerFunction() {
       console.log(var1);
   }
   innerFunction();
}

myFunction();

Wenn dieses Programm unter lexikalischem Scoping ausgeführt wird, würde local ausgegeben - denn das lexikalische Scoping würde in der näheren Umgebung der innerFunction nach der var1 suchen. Unter dynamischem Scoping jedoch würde global ausgegeben, weil die innerFunction aus der myFunction heraus aufgerufen wird, die var1 nicht explizit definiert hat. Stattdessen erbt sie die Definition aus dem globalen Bereich.

Obwohl dynamisches Scoping in einigen Situationen nützlich sein kann, insbesondere wenn es um Code-Modifizierbarkeit und -Anpassung geht, kann es auch schwierig werden, speziell wenn der Code größer und komplexer wird. Der Grund dafür ist, dass das Verstehen und Nachverfolgen des Kontextes, aus dem eine Variable kommt, schwierig sein kann, wenn sie aus dem Kontext der Laufzeit kommt. Daher wird in vielen modernen Programmiersprachen, darunter JavaScript, Python und Java, lexikalisches Scoping bevorzugt.

Finden Sie das nützlich?