Kann vor der Initialisierung nicht auf „xxx“ zugreifen und der Unterschied zwischen var, let und const

der Code

let newStory = '今天气温 34 摄氏度,:inserta:出去遛弯。当走到:insertb:门前时,突然就:insertc:。人们都惊呆了,李雷全程目睹但并没有慌,因为:inserta:是一个 130 公斤的胖子,天气又辣么热。'
if (document.getElementById("american").checked) {
   let strWeight = newStory.match(/一个 (\S*) 公斤/)[1];
   let newStory = newStory.replace(strWeight + ' 公斤', weight + ' 英镑').replace(strTemperature + ' 摄氏度', temperature + ' 华氏度');
}

falscher Grund

Im Blockbereich wird die durch let deklarierte Variable heraufgestuft, aber die Variable wird nur erstellt und heraufgestuft, und die Initialisierung wird nicht heraufgestuft.Die Verwendung der Variable vor der Initialisierung bildet eine temporäre Totzone.

Der Unterschied zwischen var, let und const

Variables Heben

Vereinfacht ausgedrückt bezieht sich Variable Promotion auf das Verhalten, dass die JavaScript-Engine den Deklarationsteil der Variablen und den Deklarationsteil der Funktion während der Ausführung des JavaScript-Codes an den Anfang des Codes hebt. Nachdem die Variable heraufgestuft wurde, wird der Standardwert von undefined auf die Variable gesetzt.

  • War 

        Unabhängig davon, wo die Variablendeklaration geschrieben wird, wird sie schließlich an den Anfang des Gültigkeitsbereichs verwiesen.

console.log(num) //undefined
var num = 1 
//相当于如下代码
var num
console.log(num)
num = 1

Die Funktionsdeklaration wird heraufgestuft. Die erste Heraufstufung ist var fn. Zu diesem Zeitpunkt ist fn eine Variable und ihr wurde keine Funktion zugewiesen, daher kann die fn-Methode nicht ausgeführt werden.

//相当于在此处声明var fn
fn()
var fn = function () {
	console.log(1)  
}
// 输出结果:Uncaught TypeError: fn is not a function

foo()
function foo () {
	console.log(2)
}
// 输出结果:2
  • lassen, const

        Es gibt eine temporäre Totzone für let und const (temporäre Totzone: Variablen werden erstellt, aber nicht initialisiert, und Variablen können nicht verwendet werden, "Zugriff auf 'Wert' vor der Initialisierung nicht möglich"), die nur in der Variablenerstellungsphase verbessert wird, nicht in der Initialisierungsphase des Aufstiegs, wodurch eine vorübergehende Totzone entsteht.

Vorteile des variablen Hebens

  • Die Heraufstufung von Deklarationen während des Parsens und der Vorkompilierung kann die Leistung verbessern, indem Funktionen während der Ausführung Stack-Speicherplatz für Variablen vorab zuweisen können;
  • Statement Promotion kann auch die Fehlertoleranz von JS-Code verbessern, sodass auch nicht standardisierter Code normal ausgeführt werden kann.

Umfang

var hat nicht das Konzept des Gültigkeitsbereichs auf Blockebene.Wenn Sie eine Methode zum Schutz interner Variablen entwickeln möchten, können Sie sie mit Closures lösen; lassen Sie und const das Konzept des Gültigkeitsbereichs auf Blockebene haben.

Bereich blockieren

Der Gültigkeitsbereich auf Blockebene ist ein Stück Code, der in geschweiften Klammern eingeschlossen ist, wie z Bereich nicht blockieren). Einfach ausgedrückt, wenn eine Sprache den Geltungsbereich auf Blockebene unterstützt, kann auf die im Codeblock definierten Variablen nicht außerhalb des Codeblocks zugegriffen werden, und nachdem der Code im Codeblock ausgeführt wurde, werden die im Codeblock definierten Variablen zerstört.

Aussage wiederholen

var kann dieselbe Variable wiederholt deklarieren, let und const können dies nicht, und von const deklarierte Variablen können den Wert nicht direkt ändern.

konst

const deklariert eine schreibgeschützte Konstante. Einmal deklariert, kann der Wert einer Konstante nicht mehr geändert werden. Sobald eine konstante Variable deklariert ist, muss sie sofort initialisiert werden und kann nicht für eine spätere Zuweisung übrig bleiben.

Hinweis : Es ist nicht der Wert der Variablen, der nicht geändert werden kann, aber die Daten, die in der Speicheradresse gespeichert sind, auf die die Variable zeigt, dürfen nicht geändert werden.
Bei einfachen Datentypen (Zahlen, Zeichenfolgen, boolesche Werte) wird der Wert an der Speicheradresse gespeichert, auf die die Variable zeigt, sodass er einer Konstante entspricht.
Aber für zusammengesetzte Datentypen (hauptsächlich Objekte und Arrays) ist die Speicheradresse, auf die die Variable zeigt, nur ein Zeiger auf die eigentlichen Daten, und const kann nur garantieren, dass der Zeiger fest ist (das heißt, er zeigt immer auf einen anderen festen Adresse) , Ob die Datenstruktur, auf die sie zeigt, veränderbar ist, ist völlig außer Kontrolle. Daher muss man sehr vorsichtig sein, wenn man ein Objekt als Konstante deklariert.

const a = ['123'];
a = ['456'];
console.log(a);

=> Fehler "Zuweisung an konstante Variable."

Ich denke du magst

Origin blog.csdn.net/qq_42101569/article/details/126432775
Empfohlen
Rangfolge