
Wenn wir eine Programmiersprache lernen, erscheinen mehrere grundlegende Konzepte, wie das Deklarieren von Variablen, und sie sind so einfach, dass wir sie ohne Kenntnis ihrer Funktionsweise verwenden können.
Ich weiß, was Sie gedacht haben: "Warum verschwenden Sie Zeit damit, uns darüber zu schreiben?"
Ich denke, es lohnt sich, ein paar Minuten zu verbringen, um diese Elemente besser zu verstehen, was ihre Bedeutung ist und wie wir sie verwenden sollten. Dies hilft Ihnen, einige häufige Fehler zu vermeiden und Code besser zu schreiben.
In diesem Artikel konzentrieren wir uns auf das Speichern von Daten in JavaScript.
Var
"Es war einmal in einer fernen Galaxie ..." Die einzige Option zum Definieren von Variablen in JavaScript war die Verwendung des Schlüsselworts var. Dies reichte aus, um die Daten im Code zu manipulieren. Mit der Einführung des ES6-Standards wurden jedoch einige der Kuriositäten und Schwächen des alten JS ziemlich offensichtlich:
- Bereich: Mit dem Schlüsselwort var können Sie Variablen nur im globalen und lokalen Bereich (oder im Bereich einer Funktion) definieren. Unabhängig davon, wie viele verschachtelte Codeblöcke Sie haben, gibt es nur diese beiden Möglichkeiten.
- Konstanten: Wenn Sie etwas definieren möchten, das sich während der Codeausführung nicht ändert, können Sie sich nur auf den gesunden Menschenverstand der Entwickler verlassen. Wir können einige nützliche Konventionen verwenden, um die Bedeutung zu verdeutlichen (z. B. Großbuchstaben), aber es gibt nichts, was garantieren könnte, dass sich die Bedeutung nicht ändert.
- Überschreiben von Variablen: Sie können die Deklaration derselben Variablen beliebig oft wiederholen (im selben Bereich). Dies ist etwas verwirrend, wenn Sie die Variablen eindeutig halten möchten.
Definitionen
Bevor wir mit den technischen Dingen beginnen, wollen wir einige allgemeine Definitionen einführen:
Eine Variable ist ein „Container“, in dem wiederverwendbare Daten gespeichert werden (sehr trivial).
Bezeichner sind Variablennamen (auch sehr trivial).
Ein Block ist ein Code, der durch geschweifte Klammern (
ccskrf ) getrennt ist. Beispiel: if, for, function und. usw.
Bereich bestimmt die Sichtbarkeit von Variablen innerhalb des Codes. Wenn Sie irgendwelche Zweifel haben, fragen Sie sich: "Wo ist meine Variable im Code sichtbar?"
HINWEIS Bitte verwechseln Sie den Bereich nicht mit dem Ausführungskontext , der anders ist.** Kontext (oder Ausführungskontext) ** ist die Umgebung, in der JavaScript-Code ausgeführt wird. Der Einfachheit halber können wir sagen, dass der
Kontext das Objekt ist, zu dem der Code gehört, und
dies ist das Schlüsselwort, das darauf verweist. Fragen Sie sich also: "Auf welches Objekt bezieht sich das?"
Nehmen wir nun an, unser Entwickler hat eine große Leidenschaft für Star Wars (das ist gut), ist aber misstrauisch gegenüber neuen Standards wie ES6 (was schlecht ist), obwohl es das schon seit einiger Zeit gibt. Deshalb schreibt er seinen Code lieber im alten ES5-Stil, und es wird so aussehen:
console.log("I am a %s", jedi); var jedi = "Ani";
Wie Sie sehen können, gibt es drei Codeblöcke (einschließlich globaler), aber nur zwei Bereiche. Dies liegt daran, dass der Code in if-Klammern keinen Bereich erstellt. Die Konsole gibt zweimal "Ich bin Darth Vader" und dann weltweit "Ich bin Ani" aus.
Beachten Sie auch, dass dieselbe Variable innerhalb der Funktion zweimal hintereinander und dann erneut in der if-Anweisung deklariert wird. Dies bedeutet, dass wir die Deklaration derselben Variablen dreimal im selben Bereich haben, was eine Ausnahme auslöst.
Last but not least lautet die Ausgabe des ersten Protokolls: Wir drucken den Wert unserer Variablen, bevor wir ihn definieren. Dies ist bei var völlig legal und wird als "Heben" bezeichnet.
Der "Aufstieg" setzt voraus, dass die deklarierten Variablen und Funktionen physisch an den Anfang Ihres Codes verschoben werden. Technisch gesehen gibt es Deklarationen von Variablen und Funktionen, die bei der Kompilierung im Speicher gespeichert werden, aber genau dort im Code verbleiben, wo Sie sie geschrieben haben. Die grundlegende Bedeutung eines Aufzugs besteht darin, dass Sie Funktionen verwenden können, bevor Sie sie in Ihrem Code deklarieren.
Sie können hier darüber lesen.
In unserem Beispiel wird die Deklaration der Variablen "jedi" im Speicher abgelegt und auf den Standardwert (undefiniert) initialisiert.
Lass
Im Moment versteht unser Entwickler, dass ES6 nicht so schlecht ist, und er beschließt, eine Chance zu geben:
console.log("I am a %s", jedi); let jedi = "Ani";
Er merkt jedoch schnell, dass er das var-Schlüsselwort nicht einfach ändern kann, um es zuzulassen. Dazu müssen Sie einige Korrekturen vornehmen:
Rising funktioniert nicht auf die gleiche Weise: Eine
Variable wird in den Status Temporal Dead Zone * * versetzt und erst initialisiert, wenn die Definition ausgewertet wird. In unserem Beispiel wird ein Fehler ausgegeben: Referenzfehler.
Eine Neuzuweisung ist verboten. Die Definition einer Variablen im Gültigkeitsbereich muss eindeutig sein. Beim Versuch, einen Fehler zu erhalten: SyntaxError.
Die if-Anweisung ist ein gültiger Blockbereich, daher ist die darin enthaltene jedi-Deklaration eindeutig.
Jetzt sollte der Code folgendermaßen aussehen:
let jedi = "Ani"; console.log("I am a %s", jedi);
Const
Jetzt, da Sie alles über let wissen, wird es einfach sein, Ihnen
const vorzustellen. Im Wesentlichen können wir sagen, dass const ähnlich wie let ist, aber Sie können keinen anderen Wert neu zuweisen. Sie müssen auch wissen, dass die Zuweisung nur während const-Deklarationen zulässig ist.
function useTheForce(comeToTheDarkSide) { const jedi = "Yoda"; if (true) { jedi = "Darth Yoda"; console.log("I am %s", jedi);
Angenommen, in unserem Beispiel ist "jedi" eine Konstante mit dem Wert "Yoda". Wenn wir versuchen, den Wert in der if-Anweisung zu ändern, erhalten wir einen TypeError-Fehler. Dies ist verständlich, da Yoda niemals der dunklen Seite beitritt.
Fazit
Wenn es unmöglich ist, ein Konzept in Worten in Sprachen auszudrücken, wird ein neues Konzept eingeführt, um die Lücke zu schließen. Dies gilt für Englisch (
Link. ), Italienisch, Esperanto, Ewokese (nehme ich an) usw. Dies gilt umso mehr für Programmiersprachen wie JavaScript.
Jetzt wissen Sie, dass Sie:
- Deklarieren Sie Variablen im Bereich des Blocks und weisen Sie ihnen nur bei der Auswertung des Blocks Speicher zu
- Halten Sie Variablendeklarationen innerhalb des Bereichs eindeutig, und vermeiden Sie, dass der Entwickler versehentlich die in einem anderen Teil des Codes verwendete Variable überschreibt (mit einem anderen Wert).
- Wir können sicherstellen, dass sich die in const gespeicherte Variable zu keinem Zeitpunkt ändert.
Mein letzter Tipp ist, const als Standardauswahl zu verwenden. Wenn Sie eine Variable neu zuweisen müssen, verwenden Sie ** let ** (wie in Schleifen). Und benutze var, wenn ... nein, du brauchst var wirklich nicht mehr
Vielen Dank für Ihre Aufmerksamkeit.
Schnelle
Javascript-FragenIch bin auf
Twitter und
vk