Heim  >  Artikel  >  Web-Frontend  >  Welches Schlüsselwort verwendet Javascript, um Variablen zu deklarieren?

Welches Schlüsselwort verwendet Javascript, um Variablen zu deklarieren?

醉折花枝作酒筹
醉折花枝作酒筹Original
2021-06-09 15:07:194772Durchsuche

In js können Sie die Schlüsselwortdeklarationen var, let und const verwenden. Mit var deklarierte Variablen können zum Speichern aller Arten von Werten verwendet werden. Der Gültigkeitsbereich ist der von let deklarierte Funktionsbereich, und der Gültigkeitsbereich der Variablen ist auf die Domäne auf Blockebene beschränkt Um Konstanten zu ändern, ist die Deklarationsposition nicht begrenzt.

Welches Schlüsselwort verwendet Javascript, um Variablen zu deklarieren?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Deklarieren Sie die Variablenschlüsselwörter var, let und const

ECMAScript-Variablen sind lose typisiert, das heißt, Variablen können zum Speichern beliebiger Datentypen verwendet werden, und jede Variable ist nichts anderes als ein benannter Platzhalter, der zum Speichern beliebiger Werte verwendet wird.

1.var-Schlüsselwort

Mit var deklarierte Variablen können zum Speichern aller Arten von Werten verwendet werden (ein undefinierter Spezialwert wird gespeichert, wenn er nicht initialisiert wird). Wie andere Sprachen kann auch JavaScript gleichzeitig Variablen definieren Der Variablen wird ein Wert zugewiesen, der den zugewiesenen Wert enthält. Da es sich bei JavaScript um eine dynamische Sprache handelt, wird sie beim Initialisieren nicht als zugewiesener Datentyp identifiziert, es handelt sich lediglich um eine einfache Zuweisung. Dann kann nicht nur der gespeicherte Wert geändert werden, sondern auch der Typ des Werts:

var message = "hi";
	message = 100;

1.1 var-Deklarationsumfang

Eine mit dem var-Operator definierte Variable wird zu einer lokalen Variablen der Funktion, die sie enthält. Die Verwendung von var zum Definieren einer Variablen innerhalb einer Funktion bedeutet beispielsweise, dass die Variable beim Beenden der Funktion zerstört wird. Ich denke, das nennt man Garbage Collection:

function test( ) {
		vart message = "hi";	//局部变量
	}
test( );
console.log(message);	//报错!

Die Variable wird nach dem Aufruf der Funktion zufällig zerstört In der letzten Zeile wird ein Fehler gemeldet. Sie können jedoch eine globale Variable erstellen, wenn Sie beim Definieren von Variablen in einer Funktion den Operator var weglassen:

function test( )  {
	message = "hi";	//全局变量
}
test( );
console.log(message);	//"hi"

Solange die Funktion test() einmal aufgerufen wird, wird die globale Variablennachricht definiert und kann außerhalb der Funktion aufgerufen werden . Da jedoch im lokalen Bereich definierte globale Variablen schwierig zu verwalten sind, wird dies im Allgemeinen nicht empfohlen.

1.2. Var-Deklaration hochziehen

Variablen, die mit dem Schlüsselwort var deklariert wurden, werden automatisch an den Anfang des Funktionsumfangs gehoben, was das sogenannte „Hoist“ ist, d. h. alle Variablendeklarationen werden an den Anfang gezogen Der Funktionsumfang:

function fool( ) {
	console.log(age);
	var age = 28;
}
fool( );	//undefined

Hier wird kein Fehler gemeldet, aber undefiniert wird angezeigt, wenn ECMAScript ausgeführt wird, wird es als äquivalent zum folgenden Code betrachtet:

function fool( ) {
	var age;
	console.log(age);
	age = 28;
}
fool( );	//undefined

2.let-Anweisung

Let hat ähnliche Funktionen wie var, aber es gibt einen sehr wichtigen Unterschied. Der offensichtlichste Unterschied besteht darin, dass der Bereich der let-Deklaration der Blockbereich ist, während der Bereich der var-Deklaration der Funktionsbereich ist:

if (true) {
	let age = 26;
	console.log(age);	//26
}
console.log(age);	//ReferceError:age没有定义

Der Bereich der Altersvariablen ist auf das Innere des Blocks beschränkt, kann also nicht außerhalb des if-Blocks referenziert werden. Der Blockbereich ist eine Teilmenge des Funktionsbereichs, daher gelten für let dieselben Bereichseinschränkungen, die für var gelten.

Let erlaubt auch keine redundanten Deklarationen im gleichen Bereich (var can):

var name;
var name;
let age;
let age;	//SyntaxError;标识符age已经声明过了

Darüber hinaus werden redundante Deklarationsfehler durch das Mischen von var und let nicht beeinträchtigt. Diese beiden Schlüsselwörter deklarieren keine Variablen unterschiedlichen Typs, sondern geben lediglich an, wie die Variablen im relevanten Bereich existieren.

2.1. Temporäre Totzone

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

//name会提升
console.log(name);	//undefined
var name = 'matt';

//name不会提升
console.log(name);	//ReferenceError:name没有定义
let name = 'matt';

2.2. Im Gegensatz zu var funktioniert die Verwendung von let global Die Domäne wird nicht zu Attributen des Fensterobjekts (mit var deklarierte Variablen werden):

var name = 'matt';
console.log(window.name);	//'matt'

let name = 'matt';
console.log(window.name);	//undefined

Lassen Sie Deklarationen jedoch weiterhin im globalen Bereich auftreten und die entsprechenden Variablen bleiben innerhalb des Deklarationszyklus der Seite bestehen.

2.3. Bedingte Deklaration

Der Gültigkeitsbereich von let ist ein Block, daher ist es unmöglich zu überprüfen, ob eine Variable mit demselben Namen zuvor mit let deklariert wurde, und es ist auch unmöglich, sie ohne Deklaration zu deklarieren. Die Verwendung von try/catch- oder typeof-Operatoren kann das Problem nicht lösen, da der Umfang der let-Deklaration im bedingten Block auf diesen Block beschränkt ist. Aus diesem Grund kann sich das neue ES6-Deklarationsschlüsselwort let nicht auf das bedingte Deklarationsmuster verlassen.

2.4. Let-Anweisung in der for-Schleife

Bei der Verwendung von var ist das häufigste Problem die seltsame Deklaration und Änderung von Iterationsvariablen:

for(var i = 0; i < 5; ++i) {
	setTimeout( () => console.log(i) ,0)
}
//你可能以为会输出0、1、2、3、4
//实际上输出的是5、5、5、5、5

Beim Verlassen der Schleife speichert die Iterationsvariable den Wert, der zum Verlassen der Schleife geführt hat. :5. Wenn die Timeout-Logik setTimeout später ausgeführt wird, ist i dieselbe Variable, sodass die endgültige Ausgabe denselben Wert hat.

Wenn Sie let verwenden, um eine Iterationsvariable zu deklarieren, deklariert die JavaScript-Engine im Hintergrund eine neue Iterationsvariable. Jedes setTimeout verweist auf eine andere Variableninstanz:

for(let i = 0; i < 5; ++i) {
	setTimeout( () => console.log(i) ,0)
}
//会输出0、1、2、3、4

3 const-Verhalten Im Grunde dasselbe wie let. Der einzige wichtige Unterschied besteht darin, dass beim Deklarieren einer Variablen die Variable gleichzeitig initialisiert werden muss und der Versuch, eine von const deklarierte Variable zu ändern, einen Laufzeitfehler verursacht.

    const声明的限制只适用于它指向的变量的引用。如果const变量引用的是一个对象,那么修改这个对象内部的属性并不违反const的限制:

const person = { };
person.name = &#39;matt&#39;;

4.使用建议

let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。

4.1.不使用var

    限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。

4.2.const优先,let次之

    使用const声明可以让浏览器运行时强制保持变量不变,也可以让静态代码分析工具提前发现不合法的赋值操作。因此,我们应该优先使用const来声明变量,只有在提前知道未来会有修改时再使用let。

【推荐学习:javascript高级教程

Das obige ist der detaillierte Inhalt vonWelches Schlüsselwort verwendet Javascript, um Variablen zu deklarieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn