JavaScript-Grundlagen: Geltungsbereich

JavaScript-Grundlagen: Geltungsbereich

Bevor wir über AO und BO sprechen, müssen wir das Konzept des Geltungsbereichs verstehen. Dadurch wird es später einfacher, viele Dinge zu verstehen, beispielsweise worauf dies hinweist.

Umfang

Der Gültigkeitsbereich ist einfach der Umfang, in dem Variablen, Funktionen und Objekte nach ihrer Definition verfügbar sind.

konsole.log(a)
{
    var a = 1;
}
Funktionstest () {
     var b=2;
}

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass die Variable b nicht außerhalb verwendet werden kann. Es ist ersichtlich, dass der Bereich Daten vor willkürlichem Zugriff und Änderung durch die Außenwelt schützen kann. Es lässt sich leicht erkennen, dass Bereiche die Variablen gegenseitig isolieren können, d. h. Variablen mit demselben Namen in unterschiedlichen Bereichen geraten nicht in Konflikt.

Die wichtigsten und am häufigsten verwendeten Bereiche sind der globale Bereich und der Funktionsbereich. Nach ES6 wurde jedoch aufgrund der Einführung der Schlüsselwörter let und const ein Blockebenenbereich eingeführt.

Globaler Umfang

Einfach ausgedrückt bedeutet der globale Gültigkeitsbereich, dass alle Domänen auf Variablen und Methodenobjekte innerhalb des Gültigkeitsbereichs zugreifen können.

var a="global1";
 Funktionstest () {
    b="Ohne var wird es implizit in eine globale Variable umgewandelt";
    window.c="Das direkte Festlegen der Variable c als Fenster macht sie auch global";
    var d="nicht-globaler Bereich";
 }
 #Der erste Schritt besteht darin, test() auszuführen
test() #Dadurch werden Variablen innerhalb der Methode definiert und Werte zugewiesen. #Schritt 2 console.log(a)
console.log(b)
console.log(c)
konsole.log(d)

Bildbeschreibung hier einfügen

Im Allgemeinen sind die Eigenschaften von Window globale Variablen, und das Format window.c behandelt c tatsächlich als eine Eigenschaft von Window. Bitte beachten Sie, dass Sie beim Deklarieren von Variablen nicht var verwenden. Es ist besser, var zu verwenden, damit es nicht zu einer globalen Variable hochgestuft wird und dadurch Daten verunreinigt werden.

Darüber hinaus ist die Testmethode auch eine globale Methode.

Funktionstest () {
    var a = Funktion(){
        console.log("literale Methode")
    }
    b = Funktion(){
        console.log("Methode ohne Variablenliteral")
    } 
   Funktion test1(){
       console.log("normale Deklarationsmethode")
   }
     
}
 

Bildbeschreibung hier einfügen

Dies zeigt, dass die Methode der wörtlichen Deklaration der Zuweisung einer Funktion zu einer Variablen und deren Behandlung als Variable ähnelt. Dies wurde auch während der Vorkompilierung demonstriert.

Funktionsumfang

Der Funktionsumfang ist das Gegenteil des globalen Umfangs. Er wird nicht überall verwendet, sondern nur in einem bestimmten Bereich. Im Allgemeinen werden deklarierte Variablen nur innerhalb der Funktion verwendet.

Funktionstest () {
     var a="nicht-globaler Bereich";
     konsole.log(a)
}

Nun gibt es ein weiteres Problem. Variablen innerhalb des Funktionsumfangs können in der globalen Methode verwendet werden. Kann eine Funktion also einen Funktionsumfang haben, der von der darunterliegenden Funktion generiert wird? Und ob ihre Variablen austauschbar sind?

Funktionstest () {
     var a="Testmethodenumfang";
    Funktion test1(){
         var b="test1 Methodenumfang";
        console.log("Wert von a=",a);
    }
    # Rufen Sie die Funktion innerhalb der Funktion test1(); auf.
     console.log("Wert von b=",b);
 }

Bildbeschreibung hier einfügen

Hier ist zu erkennen, dass der Bereich mehrschichtig ist. Der innere Bereich kann auf die Variablen des äußeren Bereichs zugreifen, der äußere Bereich kann jedoch nicht auf die inneren Variablen zugreifen.

wenn, wechseln, für, während

Bedingte Anweisungen und logische Schleifen sind keine Funktionen und verhalten sich nicht wie Funktionen, noch erstellen sie einen neuen Bereich. **Variablen, deren Blöcke definiert sind, bleiben in dem Gültigkeitsbereich, in dem sie existieren.

Funktionstest(a){
    wenn(a>1){
        var b=13;
    }anders{
       var b=1;  
    }
    console.log(b);
}

Bildbeschreibung hier einfügen

Versuchen Sie daher, bedingte Anweisungen und logische Schleifen nicht im globalen Bereich zu verwenden. Weil die Variablen im Methodenkörper andere Daten beeinflussen.

Blockumfang

Das Auftreten des Blockbereichs erfordert im Allgemeinen eines der beiden Schlüsselwörter let oder const, sonst existiert der Blockbereich nicht.

Bildbeschreibung hier einfügen

Funktionstest(a){
    const b="23";
    wenn (a>2){
        Konstante c = 3
        console.log("erste Person, wenn---c-----",c)
    }
    wenn (a>1){
        console.log("Zweite Person wenn----b----",b)
        console.log("Zweite Person, wenn----c----",c)
    }
     
}

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass, wenn die Schlüsselwörter let und const vorhanden sind, der Gültigkeitsbereich der Variablen innerhalb der geschweiften Klammern liegt, in denen sie deklariert ist. Daher kann die Variable c im ersten if nicht im zweiten if erhalten werden. Daraus folgt natürlich immer noch, dass der innere Bereich auf die Variablen des äußeren Bereichs zugreifen kann.

Weitere Informationen zu let und const finden Sie im vorherigen Artikel: Adresse

Umfangskette

Dieses scheinbar magische Konzept lässt sich einfach wie folgt beschreiben: Wenn es innerhalb des Bereichs vorhanden ist, wird es direkt verwendet, und wenn es auf der nächsten Ebene nicht vorhanden ist, wird es beendet, wenn der globale Bereich gefunden wird.

var a = 1
var b=3
Funktionstest () {
    var a = 2
    console.log("Wert von a",a);
    console.log("Wert von b",b);
}
 

Bildbeschreibung hier einfügen

Übrigens ist die Suchlogik der Bereichskette tatsächlich dieselbe wie die der Prototypkette. Wir werden später weiter darüber sprechen.

Zusammenfassen

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalten auf 123WORDPRESS.COM mehr Aufmerksamkeit schenken können!

Das könnte Sie auch interessieren:
  • Neue Blockbereichsfunktion von JavaScript ES
  • Fortgeschrittene JavaScript-Programmierung: Variablen und Umfang
  • Grafische Erklärung des zugrunde liegenden Prinzips der JavaScript-Bereichskette
  • Statischer und dynamischer Gültigkeitsbereich von JavaScript anhand von Beispielen erklärt
  • Javascript-Bereich und Abschlussdetails
  • Synchrone und asynchrone JS-Schwierigkeiten sowie Umfang und Abschluss und detaillierte Erklärung von Prototypen und Prototypenketten
  • Eine kurze Diskussion über den JavaScript-Bereich

<<:  css3-Animation, Ballrollen, js-Steuerung, Animationspause

>>:  Webseite WB.ExecWB - Beschreibung des Aufrufs der Druckmethode und Einführung in die Parameter

Artikel empfehlen

So ändern Sie MySQL-Berechtigungen, um Hosts den Zugriff zu ermöglichen

Aktivieren Sie Remote-Zugriffsrechte für MySQL My...

Docker verwendet Root, um in den Container zu gelangen

Führen Sie zuerst den Docker-Container aus Führen...

Zwei Möglichkeiten zum Beenden von Bash im Docker-Container unter Linux

Wenn Sie Bash beenden möchten, haben Sie zwei Mög...

WeChat-Applet: benutzerdefinierter TabBar-Schrittdatensatz

Inhaltsverzeichnis 1. Einleitung 2. Passen Sie de...

Detaillierte Erklärung der Verwendung von JSON.parse und JSON.stringify

Inhaltsverzeichnis JSON.parse JSON.parse-Syntax R...

Erfahrungsaustausch zur Reparatur von MySQL InnoDB-Ausnahmen

Eine Reihe von MySQL-Bibliotheken zum Testen. Die...

Detaillierte Installationshistorie von Ubuntu 20.04 LTS

In diesem Artikel wird die Erstellung einer USB-S...

Was sind die Verwendungszwecke von Limits in MySQL (empfohlen)

SELECT * FROM Tabellenname Limit m,n; SELECT * FR...

Reines HTML+CSS, um einen Element-Ladeeffekt zu erzielen

Dies ist der Effekt der Element-UI-Ladekomponente...

Verstehen Sie kurz die MySQL-Datenbankoptimierungsphase

Einführung Haben Sie schon einmal eine Situation ...

Detaillierte Erklärung des Sidecar-Modus in Docker Compose

Inhaltsverzeichnis Was ist Docker Compose Anforde...

js verwendet Cookies, um die Seitenvorgänge des Benutzers zu speichern

Vorwort Während des Entwicklungsprozesses stoßen ...