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.
Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.
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.
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;
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.
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
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.
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';
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
2.4. Let-Anweisung in der for-Schleife
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 = 'matt';
let和const是ES6中新增的,从客观上为JavaScript更精确地声明作用域和语义提供更好的支持。
限制自己只使用let和const有助于提升代码质量,因为变量有了明确的作用域、声明位置,以及不变的值。
使用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!