Die Semantik von varundlet
varund letsind eine Aussage an die Maschine und an andere Programmierer:
Ich beabsichtige, dass sich der Wert dieser Aufgabe im Laufe der Ausführung ändert. Verlassen Sie sich nicht auf den möglichen Wert dieser Aufgabe.
Auswirkungen der Verwendung von varundlet
varund letandere Programmierer zu zwingen, den gesamten dazwischenliegenden Code von der Deklaration bis zur eventuellen Verwendung zu lesen und den Wert der Zuweisung zu diesem Zeitpunkt in der Programmausführung zu begründen.
Sie schwächen die Argumentation der Maschine für ESLint und andere Sprachdienste, um falsch eingegebene Variablennamen in späteren Zuweisungen korrekt zu erkennen, und die Wiederverwendung von Variablennamen des äußeren Bereichs, wenn der innere Bereich die Deklaration vergisst.
Sie führen auch dazu, dass Laufzeiten viele Iterationen über alle Codepfade ausführen, um zu erkennen, dass es sich tatsächlich um Konstanten handelt, bevor sie optimiert werden können. Dies ist zwar weniger problematisch als die Fehlererkennung und die Verständlichkeit für Entwickler.
Wann zu verwenden const
Wenn sich der Wert der Referenz im Laufe der Ausführung nicht ändert, lautet die korrekte Syntax, um die Absicht des Programmierers auszudrücken const. Bei Objekten bedeutet das Ändern des Referenzwerts, auf ein anderes Objekt zu zeigen, da die Referenz unveränderlich ist, das Objekt jedoch nicht.
" const" Objekte
Für Objektreferenzen kann der Zeiger nicht auf ein anderes Objekt geändert werden, aber das Objekt , das auf eine erstellt und zugewiesen constErklärung ist wandelbar. Sie können Elemente zu einem constreferenzierten Array hinzufügen oder daraus entfernen und Eigenschaftsschlüssel für ein constreferenziertes Objekt mutieren .
Um unveränderliche Objekte zu erhalten (was wiederum dazu führt, dass Ihr Code für Menschen und Maschinen leichter zu verstehen ist), können Sie Object.freezedas Objekt bei Deklaration / Zuweisung / Erstellung folgendermaßen ausführen :
const Options = Object.freeze(['YES', 'NO'])
Object.freeze wirkt sich zwar auf die Leistung aus, Ihr Code ist jedoch aus anderen Gründen wahrscheinlich langsam. Sie möchten es profilieren.
Sie können das veränderbare Objekt auch in einer Zustandsmaschine kapseln und tiefe Kopien als Werte zurückgeben (so funktionieren Redux- und React-Zustände). Unter Vermeiden eines veränderlichen globalen Status in Browser JS finden Sie ein Beispiel dafür, wie Sie dies aus ersten Prinzipien erstellen können.
Wann varund letpassen gut zusammen
letund varveränderlichen Zustand darstellen. Sie sollten meiner Meinung nach nur zur Modellierung des tatsächlichen veränderlichen Zustands verwendet werden . Dinge wie " Ist die Verbindung lebendig? ".
Diese sind am besten in testbaren Zustandsautomaten eingekapselt, die konstante Werte verfügbar machen , die den " aktuellen Status der Verbindung " darstellen, der zu jedem Zeitpunkt eine Konstante ist und an dem der Rest Ihres Codes tatsächlich interessiert ist.
Das Programmieren ist bereits schwierig genug, um Nebenwirkungen zu komponieren und Daten zu transformieren. Verwandeln Sie jede Funktion in eine nicht testbare Zustandsmaschine, indem Sie einen veränderlichen Zustand mit Variablen erstellen, der nur die Komplexität erhöht.
Eine differenziertere Erklärung finden Sie unter Shun the Mutant - Der Fall fürconst .