Funktionsumfang und Blockumfang

Wenn man eine Variable innerhalb einer Funktion deklariert, ist die Variable innerhalb der Funktion gebunden und man kann außerhalb der Funktion nicht auf sie zugreifen. var ist das Schlüsselwort, mit dem man eine Variable für den Zugriff auf den Funktionsbereich definiert.

Nun könnte man sich fragen, wenn es einen Fehler gibt, auch wenn man let oder const verwendet, warum ist nur var mit dem Funktionsbereich verbunden? Die Sache ist die, dass let und const verwendet werden, um den Blockbereich zu definieren, und vor ES6 gab es in JavaScript keinen Blockbereich oder let und const.

Ein Blockbereich ist der Bereich innerhalb von if, switch Bedingungen oder for und while Schleifen. Einfach ausgedrückt, wann immer Sie {geschweifte Klammern} sehen, handelt es sich um einen Block.

Lassen Sie uns ein Beispiel sehen:

Nun könnte man erwarten, dass keiner der Log-Befehle funktionieren sollte, aber wie Sie sehen können, ist das nicht der Fall mit var, Variablen, die mit var innerhalb von if, switch Bedingungen oder for und while Schleifen definiert sind, können global zugegriffen werden und sind Teil des globalen Geltungsbereichs und daher ist es besser, let und const mit ihnen zu verwenden.

Lexikaler Anwendungsbereich

Endlich sind wir beim eigentlichen Zweck dieses Beitrags angelangt. Nun, ich hätte die lange Diskussion über den Geltungsbereich überspringen können, aber ich persönlich glaube nicht, dass man den lexikalischen Geltungsbereich verstehen kann, ohne die Schlüsselkomponenten zu kennen, die sich um ihn drehen.

Nochmals, ein Punkt, den man sich merken sollte: Javascript hat lexical scoping mit functions scope.

In einfachen Worten, es bedeutet, dass der Kinderbereich Zugriff auf die Variablen hat, die im Elternbereich definiert sind. Wenn ich zum Beispiel eine Funktion definiere und eine Variable darin deklariere und innerhalb derselben Funktion eine andere Funktion definiere, dann sollte ich in der Lage sein, diese Variable innerhalb der inneren Funktion aufgrund des lexikalischen Scopings zu verwenden. Sehen wir uns ein Beispiel an:

Aus dem Beispiel ist ersichtlich, dass auf die in outerFunction() deklarierten Variablen durch innerfunction() zugegriffen wird, dies ist lexikalisches Scoping.

Der Umfang von Variablen wird durch ihre Position im Code definiert. Um Variablen aufzulösen, beginnt Javascript im innersten Bereich und sucht so lange, bis es die gesuchte Variable findet. Im obigen Beispiel sucht Javascript zuerst nach Variablen innerhalb von innerFunction(), und wenn es sie nicht findet, geht es nach außen, d.h. outerFunction()

Lexical scoping ist besser, weil wir den Wert einer Variablen leicht aus dem Code herausfinden können, während sich beim dynamischen Scoping die Bedeutung einer Variablen zur Laufzeit ändern kann, was es komplex macht.

So, wir haben erfolgreich verstanden, was lexikalisches Scoping ist, nun lassen Sie uns einen Blick auf Closures werfen, wo lexikalisches Scoping tatsächlich verwendet wird.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.