Das Verständnis des lexikalischen Scoping kann durch Beispiele vereinfacht werden.
Lexikalisches Scoping (statischer Geltungsbereich)
Beim lexikalischen Scoping kann jede innere Ebene auf ihre äußere zugreifen Ebenen. Ein Beispiel in C-ähnlicher Syntax:
void fun() { int x = 5; void fun2() { printf("%d", x); } }
Dynamisches Scoping
Dynamisches Scoping ermöglicht es inneren Ebenen, je nach Aufrufkette auf Variablen aus dynamisch bestimmten äußeren Bereichen zuzugreifen . Ein C-ähnliches Syntaxbeispiel:
void fun() { printf("%d", x); } void dummy1() { int x = 5; fun(); } void dummy2() { int x = 10; fun(); }
Hier kann fun entweder von dummy1 oder dummy2 oder von jeder anderen Funktion, die fun mit darin deklariertem x aufruft, auf x zugreifen.
dummy1(); // Prints 5 dummy2(); // Prints 10
Hauptunterschiede
Statisches Scoping kann zur Kompilierungszeit bestimmt werden, während dynamisches Scoping davon abhängt in der Laufzeitaufrufkette. Dynamisches Scoping ist wie die Übergabe von Referenzen aller Variablen an die aufgerufene Funktion.
Statisches Scoping wird oft bevorzugt, weil es das Verständnis vereinfacht. Die meisten Sprachen, einschließlich Lisp, haben diesen Ansatz schließlich übernommen. Dynamisches Scoping kann zu Komplexität führen, wenn die Aufrufkette von Laufzeitbedingungen abhängt.
Das obige ist der detaillierte Inhalt vonLexikalisches vs. dynamisches Scoping: Was ist der Unterschied und warum bevorzugen wir statisches Scoping?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!