Heim Web-Frontend Front-End-Fragen und Antworten Welche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?

Welche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?

Oct 20, 2021 pm 02:26 PM
javascript 作用域

In JavaScript gibt es im Allgemeinen drei Arten von Bereichen, einschließlich Blockbereich. Die drei Arten von Bereichen sind: 1. Globaler Bereich, der der Bereich globaler Variablen ist, der außerhalb aller Funktionen deklariert ist. 2. Lokaler Bereich, der der Bereich lokaler Variablen ist, die innerhalb von Funktionen deklariert sind. 3. Bereich auf Blockebene zwischen dem Anfang der Variablendeklarationsanweisung auf Blockebene und dem Ende des Blocks.

Welche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?

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

Der Gültigkeitsbereich einer Variablen bezieht sich auf den gültigen lesbaren und beschreibbaren Bereich der Variablen im Skriptcode, also auf den Bereich im Skriptcode, in dem die Variable verwendet werden kann. Vor ECMAScript6 war der Umfang der Variablen hauptsächlich in globalen Geltungsbereich und lokalen Geltungsbereich (auch Funktionsumfang genannt) unterteilt.

Variablen in entsprechenden Bereichen werden als globale Variablen, lokale Variablen bzw. Variablen auf Blockebene bezeichnet.

    Globale Variablen werden außerhalb aller Funktionen deklariert.
  • Lokale Variablen sind im Funktionskörper deklarierte Variablen oder benannte Parameter der Funktion.
  • Variablen auf Blockebene sind im Block deklarierte Variablen im Block.
  • Der Gültigkeitsbereich einer Variablen hängt eng mit der Deklarationsmethode zusammen. Mit var deklarierte Variablen haben einen globalen Gültigkeitsbereich und einen Funktionsbereich, und es gibt keinen Gültigkeitsbereich auf Blockebene; mit let und const deklarierte Variablen haben einen globalen Gültigkeitsbereich, einen lokalen Gültigkeitsbereich und einen Gültigkeitsbereich auf Blockebene.

Hinweis: Globale Variablen im engeren Sinne gehören zu den Eigenschaften des Fensterobjekts, aber mit let und const deklarierte Variablen gehören nicht zum Fensterobjekt, sodass sie im engeren Sinne keine globalen Variablen sind Perspektive ihres Umfangs Sie sind globale Variablen.

Da var die Variablenheraufstufung unterstützt, gilt der globale Gültigkeitsbereich von var-Variablen für den Skriptcode der gesamten Seite, während let und const die Variablenheraufstufung nicht unterstützen, sodass sich der globale Gültigkeitsbereich von let- und const-Variablen auf den Zeitraum ab bezieht Deklarationsanweisung Der gesamte Bereich zwischen dem Ende des Skriptcodes der gesamten Seite und dem Bereich vor der Deklarationsanweisung ist ungültig.

Da var die Variablenheraufstufung unterstützt, let und const jedoch keine Variablenheraufstufung, sind mit var deklarierte lokale Variablen in der gesamten Funktion gültig, während mit let und const deklarierte lokale Variablen vom Beginn der Deklarationsanweisung bis zum gültig sind Das Ende des Funktionsbereichs ist gültig.

Es ist zu beachten, dass, wenn die lokale Variable und die globale Variable denselben Namen haben, die lokale Variable im Funktionsumfang die globale Variable überschreibt, d. h. die lokale Variable funktioniert im Funktionskörper außerhalb Funktionskörper, die globale Variable funktioniert, lokale Variablen sind ungültig und es tritt ein Syntaxfehler auf, wenn auf lokale Variablen verwiesen wird.

Bei Variablen auf Blockebene ist ihr Gültigkeitsbereich der Bereich zwischen dem Anfang der Deklarationsanweisung für die Variable auf Blockebene und dem Ende des Blocks. Der Bereich zwischen dem Blockanfang und der Variablendeklarationsanweisung auf Blockebene ist die „vorübergehende Totzone“. In diesem Bereich sind die Variablen auf Blockebene nicht gültig.

Darüber hinaus müssen Variablen im nicht strengen Betriebsmodus nicht deklariert werden. Diese nicht deklarierten Variablen sind globale Variablen, unabhängig davon, wo sie verwendet werden. Es wird im Allgemeinen nicht empfohlen, Variablen direkt zu verwenden, ohne sie zu deklarieren, da dies zu Fehlern führen kann, die nicht leicht zu finden sind.

【Beispiel 1】Beispiel für den Variablenbereich.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>变量作用域示例</title>
<script>   
     var v1 = "JavaScript"; //全局变量
     let v2 = "JScript"; //全局变量
     let v3 = "Script"; //全局变量
     scopeTest();    //调用函数
     function scopeTest(){
         var lv = "aaa"; //局部变量
         var v1 = "bbb"; //局部变量
         let v2 = "ccc"; //局部变量
         if(true){
              let lv = "123"; //块级变量
              console.log("块内输出的lv = " + lv); //123
         }
         console.log("函数体内输出的lv = " + lv); //aaa
         console.log("函数体内输出的v1 = " + v1); //bbb
         console.log("函数体内输出的v2 = " + v2); //ccc
         console.log("函数体内输出的v3 = " + v3); //Script
         //v4为全局变量,赋值在后面,因而值为undefined
         console.log("函数体内输出的v4 = " + v4);
     }
     var v4 = "VBScript"; //全局变量
     console.log("函数体外输出的lv = " + lv); //① 报ReferenceError错误
     console.log("函数体外输出的v1 = " + v1); //JavaScript
     console.log("函数体外输出的v2 = " + v2); //JScript
     console.log("函数体外输出的v3 = " + v3); //Script
     console.log("函数体外输出的v3 = " + v4); //VBScript
</script>
</head>
<body>
</body>
</html>
Nach dem Login kopieren

Der obige Skriptcode deklariert jeweils 4 globale Variablen, 3 lokale Variablen und 1 Variable auf Blockebene. Außerhalb der ScopeTest-Funktion sind die Variablen v1, v2, v3 und v4 globale Variablen innerhalb des ScopeTest-Funktionskörpers, lv und v2 sind globale Variablen im if-Beurteilungsblock, lv ist eine Variable auf Blockebene.

Wir sehen, dass die lokalen Variablen v1 und v2 dieselben Namen haben wie die globalen Variablen v1 und v2. Im ScopeTest-Funktionskörper sind die lokalen Variablen v1 und v2 gültig, sodass die Ausgabeergebnisse dieser beiden Variablen im Funktionskörper „bbb“ sind „ und „ccc“ bzw. „; Außerhalb des Funktionskörpers sind die globalen Variablen v1 und v2 gültig, daher sind die Ausgabeergebnisse dieser beiden Variablen außerhalb des Funktionskörpers „JavaScript“ bzw. „JScript“.

Darüber hinaus haben die Blockebenenvariable lv und die lokale Variable lv denselben Namen. Im if-Beurteilungsblock ist die Blockebenenvariable lv gültig, sodass das Ausgabeergebnis im Block „123“ ist, während es außerhalb des Blocks liegt Der Block, die lokale Variable lv ist gültig und die lv-Variable Das Ausgabeergebnis ist „aaa“.

Darüber hinaus werden die globalen Variablen v3 und v4 im Funktionskörper nicht überschrieben, sodass der Wert der globalen Variablen ausgegeben wird, sodass das Ausgabeergebnis von v3 innerhalb und außerhalb des Funktionskörpers „Skript“ ist, während die Die Zuweisung der v4-Variablen erfolgt im Funktionsaufruf, sodass das Ausgabeergebnis von v4 im Funktionskörper „undefiniert“ ist, während die Ausgabe außerhalb des Funktionskörpers nach der Deklaration erfolgt, sodass das Ergebnis „VBScript“ ist. lv ist eine lokale Variable, daher wird beim Zugriff darauf außerhalb der Funktion ein „ReferenceError“-Fehler gemeldet.

Nachdem der obige Code im Chrome-Browser ausgeführt wurde, öffnen Sie die Browserkonsole und Sie können die in Abbildung 1 gezeigte Ausgabe sehen.

Abbildung 1: ① Konsolenausgabe vor dem CodekommentarWelche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?

Wie in Abbildung 1 gezeigt, wird der lv-undefinierte Referenzfehler in der 26. Codezeile (d. h. dem unter ① in Beispiel 1 kommentierten Code) gemeldet. Dies liegt daran, dass die lv-Variable eine lokale Variable ist und nach dem Verlassen ungültig ist Funktion. Kommentieren Sie diese Codezeile und führen Sie sie dann aus. Öffnen Sie nun die Browserkonsole und Sie können die in Abbildung 2 gezeigten Ergebnisse sehen.

Welche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?
Abbildung 2: ① Konsolenausgabe nach dem Codekommentar

Wie aus Abbildung 2 ersichtlich ist, decken Variablen auf Blockebene lokale Variablen innerhalb des Blocks ab, lokale Variablen decken globale Variablen innerhalb des Funktionskörpers ab und es gibt keine überschriebenen globalen Variablen Variablen. Gültig innerhalb und außerhalb des Funktionskörpers. Überlegung: Warum ist das Ausgabeergebnis der v4-Variablen im Funktionskörper „undefiniert“, ohne dass ein Fehler gemeldet wird?

Weitere Kenntnisse zum Thema Programmierung finden Sie unter: Programmiervideos! !

Das obige ist der detaillierte Inhalt vonWelche allgemeinen Arten von Bereichen gibt es in JavaScript? Gibt es einen Blockbereich in js?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Verwendung der Typedef-Struktur in der C-Sprache Verwendung der Typedef-Struktur in der C-Sprache May 09, 2024 am 10:15 AM

typedef struct wird in der C-Sprache zum Erstellen von Strukturtypaliasen verwendet, um die Verwendung von Strukturen zu vereinfachen. Es weist einem neuen Datentyp ein Alias ​​auf eine vorhandene Struktur zu, indem es den Strukturalias angibt. Zu den Vorteilen gehören verbesserte Lesbarkeit, Wiederverwendung von Code und Typprüfung. Hinweis: Die Struktur muss vor der Verwendung eines Alias ​​definiert werden. Der Alias ​​muss im Programm eindeutig sein und nur innerhalb des Bereichs gültig sein, in dem er deklariert ist.

So lösen Sie die in Java erwartete Variable So lösen Sie die in Java erwartete Variable May 07, 2024 am 02:48 AM

Variablenerwartungsausnahmen in Java können gelöst werden durch: Initialisierung von Variablen; Verwendung von Nullwerten; Verwendung von Überprüfungen und Zuweisungen;

Vor- und Nachteile von Verschlüssen in js Vor- und Nachteile von Verschlüssen in js May 10, 2024 am 04:39 AM

Zu den Vorteilen von JavaScript-Abschlüssen gehören die Aufrechterhaltung des variablen Bereichs, die Aktivierung von modularem Code, die verzögerte Ausführung und die Ereignisbehandlung. Zu den Nachteilen zählen Speicherverluste, erhöhte Komplexität, Leistungsaufwand und Auswirkungen der Bereichskette.

Was bedeutet include in c++? Was bedeutet include in c++? May 09, 2024 am 01:45 AM

Die Präprozessoranweisung #include in C++ fügt den Inhalt einer externen Quelldatei in die aktuelle Quelldatei ein und kopiert ihren Inhalt an die entsprechende Stelle in der aktuellen Quelldatei. Wird hauptsächlich zum Einschließen von Header-Dateien verwendet, die im Code benötigte Deklarationen enthalten, z. B. #include <iostream>, um Standard-Eingabe-/Ausgabefunktionen einzubinden.

C++-Smartpointer: eine umfassende Analyse ihres Lebenszyklus C++-Smartpointer: eine umfassende Analyse ihres Lebenszyklus May 09, 2024 am 11:06 AM

Lebenszyklus von C++-Smartpointern: Erstellung: Smartpointer werden erstellt, wenn Speicher zugewiesen wird. Eigentumsübertragung: Übertragen Sie das Eigentum durch einen Umzugsvorgang. Freigabe: Speicher wird freigegeben, wenn ein Smart Pointer den Gültigkeitsbereich verlässt oder explizit freigegeben wird. Objektzerstörung: Wenn das Objekt, auf das gezeigt wird, zerstört wird, wird der intelligente Zeiger zu einem ungültigen Zeiger.

Können die Definition und der Aufruf von Funktionen in C++ verschachtelt werden? Können die Definition und der Aufruf von Funktionen in C++ verschachtelt werden? May 06, 2024 pm 06:36 PM

Dürfen. C++ erlaubt verschachtelte Funktionsdefinitionen und Aufrufe. Externe Funktionen können integrierte Funktionen definieren und interne Funktionen können direkt innerhalb des Bereichs aufgerufen werden. Verschachtelte Funktionen verbessern die Kapselung, Wiederverwendbarkeit und Bereichskontrolle. Interne Funktionen können jedoch nicht direkt auf lokale Variablen externer Funktionen zugreifen, und der Rückgabewerttyp muss mit der Deklaration der externen Funktion übereinstimmen. Interne Funktionen können nicht selbstrekursiv sein.

Es gibt mehrere Situationen, auf die dies in js hinweist Es gibt mehrere Situationen, auf die dies in js hinweist May 06, 2024 pm 02:03 PM

Zu den Zeigertypen gehören in JavaScript: 1. Globales Objekt; 3. Konstruktoraufruf; 5. Pfeilfunktion (erbt dies); Darüber hinaus können Sie mit den Methoden bind(), call() und apply() explizit festlegen, worauf dies hinweist.

Der Unterschied zwischen let und var in vue Der Unterschied zwischen let und var in vue May 08, 2024 pm 04:21 PM

In Vue gibt es beim Deklarieren von Variablen zwischen let und var einen Unterschied im Gültigkeitsbereich: Gültigkeitsbereich: var hat einen globalen Gültigkeitsbereich und let hat einen Gültigkeitsbereich auf Blockebene. Bereich auf Blockebene: var erstellt keinen Bereich auf Blockebene, let erstellt einen Bereich auf Blockebene. Neudeklaration: var ermöglicht die Neudeklaration von Variablen im gleichen Bereich, let jedoch nicht.

See all articles