Verstehen Sie die Unterschiede zwischen den Variablen var, let und const gründlich


1. var

1. Bereich deklarieren

Eine mit var definierte Variable wird zu einer lokalen Variablen der Funktion, die sie enthält.

function foo(){
    
    
var msg = 'helloword'  //局部变量
}
foo()
console.log(msg)  //报错未定义 test is not defined

Hier wird die msg-Variable mithilfe von var innerhalb der Funktion definiert. Der Aufruf der Funktion foo erstellt diese Variable und weist ihr einen Wert zu. Die Variable msg wird nach dem Aufruf zerstört, sodass beim endgültigen Ausdruck ein Fehler gemeldet wird.

Wenn Sie mehrere Variablen definieren müssen, können Sie jede Variable in einer Anweisung durch ein Komma trennen.

        var name = 'uzi',
            age = '22',
            team = 'rng'
        console.log(name, age, team);

Daher können Fügen Sie hier eine Bildbeschreibung ein
im strikten Modus die Variablen von evalund nicht definiert werden, andernfalls wird ein Syntaxfehler gemeldet.arguments

2. Statement-Werbung

Schauen Sie sich zuerst den Code an

      function foo(){
    
    
          console.log(name)   //undefined
          var name = 'Jay'
      }
      foo()

Warum ist es undefiniert, anstatt einen Fehler zu melden? Weil die ES-Laufzeit es als den entsprechenden Code unten ansieht

      function foo(){
    
    
          var name
          console.log(name)     //undefined
          name = 'Jay'
      }
      foo()

Dies wird als Variablen-Hoisting bezeichnet und Variablen, die mit dem Schlüsselwort var deklariert wurden, werden automatisch an die Spitze des Funktionsumfangs gehoben .
Darüber hinaus ist es auch möglich, var zu verwenden, um dieselbe Variable mehrmals gleichzeitig zu deklarieren.

        function foo() {
    
    
            var name = 'Jay'
            var name = 'Eason'
            var name = 'Beyond'
            console.log(name)   //Beyond
        }
        foo()

2. lassen

1. Bereich deklarieren

let und var sind ähnlich, aber der sehr wichtige Unterschied besteht darin, dass let der Gültigkeitsbereich auf Blockebene ist , während der Gültigkeitsbereich von var der Funktionsbereich ist.

        if (1 == true) {
    
    
            var goods = 'chatgpt-3'
            let newGoods = 'chatgpt-4'
            console.log(goods);      //chatgpt-3
            console.log(newGoods);   //chatgpt-4
        }
        console.log(goods);          //chatgpt-3
        console.log(newGoods);       //报错未定义  newGoods is not defined

Der Grund, warum auf die Variable newGoods nicht außerhalb von if verwiesen werden kann, liegt darin, dass ihr Gültigkeitsbereich auf das Innere des Blocks beschränkt ist.

2. Wiederholen Sie die Aussage

let lässt nicht zu, dass dieselbe redundante Deklaration im selben Bereich auf Blockebene erscheint, was zu dem Fehler „
Fügen Sie hier eine Bildbeschreibung ein
Uncaught SyntaxError: Identifier 'name' has been needed“
führt , was darauf hinweist, dass name bereits deklariert wurde.

Allerdings verursacht derselbe Bezeichner , der bei der Verschachtelung verwendet wird, keinen Fehler, da im selben Block keine doppelte Deklaration vorhanden ist.

        let name = 'Macey'
        console.log(name);      //Macey
        function foo(){
    
    
            name = 'Ronaldo'
            console.log(name);  //Ronaldo
        }
        foo()

3. Variable Förderung

Ein weiterer wichtiger Unterschied zwischen let und var besteht darin, dass von let deklarierte Variablen im Gültigkeitsbereich nicht hochgestuft werden .

        console.log(name);     //undefined
        var name = 'Macey'
        console.log(age);      //未定义  Uncaught ReferenceError: Cannot access 'age' before initialization
        let age = '35'

Der Zeitpunkt der Ausführung vor der Deklaration von let wird als „ temporäre Totzone “ bezeichnet. In dieser Phase wird ein Fehler gemeldet, wenn auf später deklarierte Variablen verwiesen wird!

4. Globale Erklärung

Im Gegensatz zu var werden Variablen, die im globalen Gültigkeitsbereich mit let deklariert wurden, nicht zu Attributen dieses Objekts oder von Fensterobjekten (die mit var deklarierten werden dies tun).

        var name = 'Macey'
        console.log(this.name);    //Macey
        let age = '35'
        console.log(this.age);     //undefined

Die Deklaration von let erfolgt jedoch weiterhin global und die entsprechenden Variablen bleiben während des gesamten Lebenszyklus der Seite bestehen. Um wiederholte Definitionsfehler zu vermeiden , ist es am besten, dieselbe Variable nicht wiederholt zu deklarieren.
Innerhalb einer Funktion können Sie das Schlüsselwort this verwenden, um auf das globale Objektfenster zu verweisen. Daher wird im obigen Code der Variablenname als globale Variable betrachtet und kann daher über dieses oder das Fensterobjekt aufgerufen werden.
Das Alter ist im Blockbereich sichtbar, in dem es deklariert ist, jedoch nicht im globalen Bereich. Daher kann im globalen Kontext nicht auf die Variable b zugegriffen werden.

5.Deklaration in der for-Schleife

In einer for-Schleife mit var definierte Iterationsvariablen dringen außerhalb des Schleifenkörpers ein

        for (var i = 0; i < 5; i++) {
    
    
            //逻辑
        }
        console.log(i);
        for (let j = 0; j < 5; j++) {
    
    
            //逻辑
        }
        console.log(j);

Drucken Sie das Ergebnis aus, Fügen Sie hier eine Bildbeschreibung ein
da die Variablen, die iteriert werden können, auf den Bereich innerhalb des Blockebenenbereichs beschränkt sind

Schauen wir uns ein weiteres berühmtes Beispiel an

        for (var i = 0; i < 5; i++) {
    
    
            setTimeout(() => console.log('i======', i))
        }
        for (let j = 0; j < 5; j++) {
    
    
            setTimeout(() => console.log('j======', j))
        } 

Der Grund für die Ausgabe des Ergebnisses Fügen Sie hier eine Bildbeschreibung ein
ist, dass der beim Verlassen der Schleife in var gespeicherte Wert 5 ist. Wenn setTimeout später ausgeführt wird, sind alle i dieselbe Variable, sodass die Ausgabe denselben Wert hat.
Bei Verwendung der let-Iterationsdeklaration deklariert JS für jede Iterationsschleife eine neue Iterationsvariable. Jeder setTimeout verweist auf eine andere Variableninstanz.
Dieses Verhalten der Deklaration einer unabhängigen Variableninstanz für jede Iteration gilt für alle Arten von for-Schleifen, einschließlich for-in- und for-of-Schleifen.

3. Konst

Das Verhalten von const ist grundsätzlich dasselbe wie let. Der einzige wichtige Unterschied besteht darin, dass beim Deklarieren einer Variablen ein Wert zugewiesen werden muss . Sobald ein einfacher Datentyp (numerischer Wert, Zeichenfolge, boolescher Wert) deklariert ist, kann er weder geändert noch geändert werden Fehler wird gemeldet.

        const name
        //一旦声明了就必须赋值 Missing initializer in const declaration
        const age = '22'
        age = '23'              //不能赋值   Assignment to constant variable

        const color = 'red'
        const color = 'blue'    //不能重复声明 Identifier 'color' has already been declared

        const name = 'Macey'
        console.log(name);      //Macey  
        function foo() {
    
    
            const name = 'Ronaldo'
            console.log(name);  //Ronaldo   声明的作用域也是块级
        }
        foo()

Die Einschränkungen einer const-Deklaration gelten nur für Verweise auf die Variablen, auf die sie verweist. Wenn const auf ein Objekt oder Array verweist, sind geänderte interne Eigenschaften zulässig.

      const person = {
    
    
          name: 'Jay'
      }
      person.name = 'Eason'
      console.log(person.name);      //Eason

Wenn Sie das Objekt wirklich einfrieren möchten, sollten Sie Object.freezedie Methode verwenden.

        const person = Object.freeze({
    
    
            name: 'Jay'
        })
        // 常规模式时,下面一行不起作用;
        // 严格模式时,该行会报错
        person.name = 'Eason'
        console.log(person.name);       // Jay

Ende:

Deklarationsstil : Mit let und const wird var nicht mehr verwendet, da Variablen einen klaren Gültigkeitsbereich haben, Deklarationen Vorrang haben und unveränderliche Werte vorhanden sind.
Die Priorität von const sollte höher sein als die von let : Durch die Verwendung der const-Deklaration kann der Browser gezwungen werden, Variablen bei der Ausführung unverändert zu lassen, und es kann auch statischen Code-Analysetools ermöglichen, illegale Zuweisungsvorgänge im Voraus zu erkennen. Verwenden Sie let nur, wenn Sie im Voraus wissen, dass eine Variable in Zukunft geändert wird. Dadurch können Sie ableiten, dass sich der Wert einiger Variablen nie ändert, und unerwartetes Verhalten, das durch versehentliche Zuweisungen verursacht wird, schnell erkennen.

Referenz: Fortgeschrittene Programmierung mit JavaScript (4. Auflage)

Supongo que te gusta

Origin blog.csdn.net/Jet_Lover/article/details/129750043
Recomendado
Clasificación