389 Stimmen

Const in JavaScript: wann es zu verwenden ist und ist es notwendig?

Ich bin kürzlich auf das const Schlüsselwort in JavaScript gestoßen. Soweit ich sehen kann, wird es verwendet, um unveränderliche Variablen zu erstellen, und ich habe getestet, um sicherzustellen, dass es nicht neu definiert werden kann (in Node.js):

const x = 'const';
const x = 'not-const';

// Wird einen Fehler liefern: 'Konstante 'x' wurde bereits definiert'

Ich weiß, dass es noch nicht in allen Browsern standardisiert ist - aber ich bin nur am Kontext von Node.js V8 interessiert, und ich habe bemerkt, dass bestimmte Entwickler / Projekte es stark bevorzugen, obwohl das var-Schlüsselwort den gleichen Effekt erzielen könnte.

  • Wann ist es angemessen, const anstelle von var zu verwenden?
  • Sollte es jedes Mal verwendet werden, wenn eine Variable deklariert wird, die nicht neu zugewiesen wird?
  • Macht es tatsächlich einen Unterschied, ob var anstelle von const oder umgekehrt verwendet wird?

3voto

vinod Punkte 2684

Der Hauptpunkt ist, wie man entscheidet, welcher Bezeichner während der Entwicklung verwendet werden soll.

In JavaScript gibt es drei Bezeichner.

  1. var (kann neu deklariert und neu initialisiert werden)
  2. const (kann nicht neu deklariert und neu initialisiert werden, und kann Array-Werte durch Verwendung von push aktualisieren)
  3. let (kann neu initialisiert werden, aber nicht neu deklariert)

'var': Wenn wir beim Codieren über Code-Standards sprechen, verwenden wir in der Regel den Namen eines Bezeichners, der von anderen Benutzern und Entwicklern leicht verstanden werden kann.

Zum Beispiel, wenn wir durch viele Funktionen arbeiten, in denen wir Eingaben verwenden und diese verarbeiten und ein Ergebnis zurückgeben, wie:

Beispiel für die Verwendung von Variablen

function firstFunction(input1, input2)
{
    var process = input1 + 2;
    var result = process - input2;
    return result;
}

function otherFunction(input1, input2)
{
    var process = input1 + 8;
    var result = process * input2;
    return result;
}

In den obigen Beispielen produzieren beide Funktionen unterschiedliche Ergebnisse, verwenden jedoch dieselben Variablennamen. Hier können wir sehen, dass 'process' & 'result' beide als Variablen verwendet werden und sollten.

Beispiel für Konstante mit Variable

const tax = 10;
const pi = 3.1415926535;

function firstFunction(input1, input2)
{
    var process = input1 + 2;
    var result = process - input2;
    result = (result * tax)/100;
    return result;
}

function otherFunction(input1, input2)
{
    var process = input1 + 8;
    var result = process * input2 * pi;
    return result;
}

Vor der Verwendung von 'let' in JavaScript müssen wir 'use strict' oben in der JavaScript-Datei hinzufügen

Beispiel für let mit Konstante & Variable

const tax = 10;
const pi = 3.1415926535;
let trackExecution = '';

function firstFunction(input1, input2)
{
    trackExecution += 'On firstFunction';
    var process = input1 + 2;
    var result = process - input2;
    result = (result * tax)/100;
    return result;
}

function otherFunction(input1, input2)
{
    trackExecution += 'On otherFunction'; # Aktuelle Zeit hinzufügen
    var process = input1 + 8;
    var result = process * input2 * pi;
    return result;
}

firstFunction();
otherFunction();
console.log(trackExecution);

In obigem Beispiel können Sie verfolgen, welche Funktion wann ausgeführt wurde und welche Funktion während einer bestimmten Aktion nicht verwendet wurde.

3voto

Josh Wulf Punkte 4452

Die Semantik von var und let

var und let sind eine Aussage an die Maschine und an andere Programmierer:

Ich beabsichtige, dass der Wert dieser Zuweisung im Verlauf der Ausführung geändert wird. Verlassen Sie sich nicht auf den eventuellen Wert dieser Zuweisung.

Auswirkungen der Verwendung von var und let

var und let zwingen andere Programmierer dazu, den gesamten dazwischenliegenden Code von der Deklaration bis zur eventuellen Verwendung zu lesen und über den Wert der Zuweisung an diesem Punkt in der Programmausführung nachzudenken.

Sie schwächen das maschinelle Denken für ESLint und andere Sprachdienste, um falsch geschriebene Variablennamen in späteren Zuweisungen zu erkennen und die Wiederverwendung von Variablennamen im äußeren Bereich zu optimieren, wenn der innere Bereich vergisst, sie zu deklarieren.

Sie veranlassen die Laufzeiten auch dazu, viele Iterationen über alle Codepfade durchzuführen, um festzustellen, dass sie tatsächlich, in der Tat, Konstanten sind, bevor sie sie optimieren können. Obwohl dies weniger ein Problem als die Fehlererkennung und die Verständlichkeit für Entwickler ist.

Wann const verwenden

Wenn sich der Wert der Referenz im Verlauf der Ausführung nicht ändert, ist die richtige Syntax, um die Absicht des Programmierers auszudrücken, const. Bei Objekten bedeutet die Änderung des Werts der Referenz, dass auf ein anderes Objekt verwiesen wird, da die Referenz unveränderlich ist, das Objekt jedoch nicht.

"const"-Objekte

Bei Objektreferenzen kann der Zeiger nicht auf ein anderes Objekt geändert werden, aber das erstellte und einer const-Deklaration zugewiesene Objekt ist veränderlich. Sie können Elemente zu einem mit const referenzierten Array hinzufügen oder entfernen und Eigenschaftsschlüssel an einem mit const referenzierten Objekt verändern.

Um unveränderliche Objekte zu erreichen (was Ihren Code wiederum für Menschen und Maschinen einfacher macht), können Sie das Objekt bei der Deklaration/Zuweisung/Erstellung mit Object.freeze einfrieren, wie folgt:

const Options = Object.freeze(['YES', 'NO'])

Object.freeze hat Auswirkungen auf die Leistung, aber Ihr Code ist wahrscheinlich aus anderen Gründen langsam. Sie sollten ihn testen.

Sie können auch das veränderliche Objekt in eine Zustandsmaschine einschließen und tiefe Kopien als Werte zurückgeben (so funktionieren Redux und React-Status). Siehe Vermeidung von veränderlichem globalen Status in Browser-JS für ein Beispiel, wie man dies von Grund auf aufbaut.

Wann var und let gut passen

let und var stellen einen veränderlichen Zustand dar. Sie sollten meiner Meinung nach nur verwendet werden, um tatsächlichen veränderlichen Zustand zu modellieren. Dinge wie "ist die Verbindung aktiv?".

Diese sollten am besten in testbaren Zustandsmaschinen gekapselt sein, die konstante Werte freigeben, die "den aktuellen Zustand der Verbindung" repräsentieren, der zu einem beliebigen Zeitpunkt konstant ist und an dem der Rest Ihres Codes tatsächlich interessiert ist.

Das Programmieren ist bereits schwer genug, wenn es um das Komponieren von Nebenwirkungen und die Transformation von Daten geht. Jede Funktion in eine untestbare Zustandsmaschine zu verwandeln, indem man veränderliche Zustände mit Variablen erstellt, erhöht nur die Komplexität.

Für eine nuanciertere Erklärung siehe Vermeide den Mutanten - Argumente für const.

2voto

Genovo Punkte 511

Es bietet:

  1. eine konstante Referenz, z.B. const x = [] - das Array kann geändert werden, aber x kann nicht auf ein anderes Array zeigen; und

  2. Block-Scoping.

const und let werden zusammen var in ECMAScript 6/2015 ersetzen. Siehe Diskussion unter JavaScript ES6 Variable-Deklarationen mit let und const

2voto

T.J. Crowder Punkte 948310

Zuerst drei nützliche Dinge über const (abgesehen von den mit let geteilten Verbesserungen im Geltungsbereich):

  • Es dokumentiert für Personen, die später den Code lesen, dass der Wert nicht geändert werden darf.
  • Es verhindert, dass Sie (oder jemand, der nach Ihnen kommt) den Wert ändern, es sei denn, sie gehen zurück und ändern die Deklaration absichtlich.
  • Es könnte dem JavaScript-Engine etwas Analysearbeit in Bezug auf Optimierung ersparen. Zum Beispiel haben Sie erklärt, dass sich der Wert nicht ändern kann, sodass der Engine keine Arbeit geleistet werden muss, um festzustellen, ob sich der Wert ändert, damit er basierend auf der Nichtänderung optimieren kann.

Ihre Fragen:

Wann ist es angemessen, const anstelle von var zu verwenden?

Sie können es jederzeit verwenden, wenn Sie eine Variable deklarieren, deren Wert sich nie ändert. Ob Sie das für angemessen halten, liegt ganz bei Ihrer Präferenz / der Präferenz Ihres Teams.

Sollte es jedes Mal verwendet werden, wenn eine Variable deklariert wird, die nicht neu zugewiesen wird?

Das liegt an Ihnen / Ihrem Team.

Macht es tatsächlich einen Unterschied, ob var anstelle vonconst` oder umgekehrt verwendet wird?

Ja:

  • var und const haben unterschiedliche Geltungsbereichsregeln. (Sie wollten möglicherweise mit let vergleichen anstelle von var.) Speziell: const und let haben einen Block-Geltungsbereich und erstellen, wenn sie im globalen Geltungsbereich verwendet werden, keine Eigenschaften im globalen Objekt (obwohl sie globale Variablen erstellen). var hat entweder einen globalen Geltungsbereich (wenn im globalen Geltungsbereich verwendet) oder einen Funktionengeltungsbereich (auch wenn in einem Block verwendet) und erstellt, wenn im globalen Geltungsbereich verwendet, eine Eigenschaft im globalen Objekt.
  • Siehe die "drei nützlichen Dinge" oben, sie alle gelten für diese Frage.

1voto

Tiago Martins Peres Punkte 12271

Wenn es um die Entscheidung zwischen let und const (beide blockbegrenzt) geht, bevorzuge immer const, damit die Verwendung im Code klar ist. Auf diese Weise erhalten Sie einen Fehler, wenn Sie versuchen, die Variable erneut zu deklarieren. Wenn es keine andere Wahl gibt, wechseln Sie einfach zu let. Beachten Sie, dass, wie Anthony sagt, die Werte von const nicht unveränderlich sind (zum Beispiel kann ein Objekt von const Eigenschaften mutiert haben).

Was var angeht, habe ich seit ES6 nie in der Produktion verwendet und kann keinen Anwendungsfall dafür finden. Ein Punkt, der einen dazu bringen könnte, es zu verwenden, ist JavaScript Hoisting - während let und const nicht gehoistet werden, ist die Deklaration von var gehoistet. Achten Sie jedoch darauf, dass mit var deklarierte Variablen einen Funktionsumfang haben, keinen blockumfang («wenn außerhalb einer Funktion deklariert, sind sie im gesamten Programm global verfügbar; wenn innerhalb einer Funktion deklariert, sind sie nur innerhalb der Funktion selbst verfügbar», in HackerRank - Schlüsselwörter zur Variablendeklaration). Sie können let als die blockbegrenzte Version von var betrachten.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X