Verstehen Sie schnell den JavaScript-Bereich

Die W3-Schule erklärte es folgendermaßen:
In JavaScript sind Objekte und Funktionen auch Variablen. Der Bereich bestimmt die Zugänglichkeit von Variablen, Objekten und Funktionen aus verschiedenen Teilen des Codes.


Lokaler und globaler Bereich

In JavaScript gibt es zwei Arten von Gültigkeitsbereichen: den lokalen und den globalen Gültigkeitsbereich.

Die Zugänglichkeit einer Variablen wird durch den Gültigkeitsbereich bestimmt. Wenn 变量asie im Funktionskörper deklariert ist, wird sie zu einer lokalen Variablen der Funktion und ist von außen nicht zugänglich.

    var global = 321;
    function private() {
    
    
            var a = 123; //局部变量,外部不可见
            console.log(a);//123
            console.log(global);//321
        }
        private();
        console.log(a); //错误:Uncaught ReferenceError: a is not defined

Im obigen Code handelt es sich globalum eine globale Variable, auf die auch aim Funktionskörper zugegriffen werden kann. Es handelt sich jedoch um eine im Funktionskörper deklarierte Variable, und der Gültigkeitsbereich ist auf den Funktionskörper beschränkt. Wenn es außerhalb aufgerufen wird, wird ein Fehler gemeldet, da er nicht definiert ist.


Gültigkeitsdauer von JavaScript-Variablen

Die Gültigkeitsdauer einer JavaScript-Variablen beginnt mit ihrer Erstellung.

Lokale Variablen werden nach Abschluss der Funktion gelöscht.

Globale Variablen werden gelöscht, wenn Sie die Seite schließen.


Vorkompiliert

Lassen Sie uns vor dem Üben die Vorkompilierung in JS erwähnen, die wir später verwenden werden

1. Beim Erstellen eines AO-Objekts
wird implizit ein leeres AO-Objekt (Activation Object) erstellt.

2. Suchen Sie nach den formalen Parameter- und Variablendeklarationen, verwenden Sie den formalen Parameternamen und den Variablennamen als Eigenschaften des AO-Objekts, und der Wert ist undefiniert.
Beachten Sie, dass dies eine Variablendeklaration ist (var muss enthalten sein), der formale Parametername und der Name der Variablendeklaration jedoch nicht zugewiesen sind.

3. Fügen Sie das Formular zur Statistik der tatsächlichen Parameter hinzu
, dh ändern Sie den Wert des Attributs formaler Parameter im AO-Objekt in den übergebenen tatsächlichen Parameter. Wenn kein formaler Parameter vorhanden ist, überspringen Sie diesen Schritt.

4. Suchen Sie die Funktionsdeklaration. Der Funktionsname ist das Attribut des AO-Objekts und der Funktionskörper ist der Wert.
Hinweis: Dies ist eine Funktionsdeklaration, kein anonymer Funktions- und Funktionsausdruck.

Zusammenfassung: Der Vorkompilierungsprozess ist der Prozess des Findens von Variablendeklarationen, formalen Parametern und Funktionsdeklarationen. Er initialisiert und weist keine Werte zu und wird während der Interpretations- und Ausführungsphase initialisiert.


Übung

Wir kennen die Grundlagen des Umfangs bereits. Lassen Sie uns unsere Meisterschaft mit einigen Fragen testen.

Sie können versuchen, es selbst zu analysieren, und dann werde ich diese Themen später einzeln analysieren.

//题目一:
    var a = "aa";
    function test() {
    
    
            console.log(a);
            var a = "bb";
            console.log(a);
        }
    test();
    alert(a);
//题目二:
    (function() {
    
         
        var a = 5    
        function a() {
    
    }    
        console.log(a);

        function b() {
    
    }
        b = 6;
        console.log(b);
        var c = d = b    
    })();
    console.log(d);
    console.log(c);
//题目三:
    var foo = {
    
    
            n: 1
        };
    (function(foo) {
    
    
        console.log(foo.n);
        foo.n = 3;
        var foo = {
    
     
            n: 2
        }
        console.log(foo.n);
    })(foo) 
    console.log(foo.n)

Parsing

//题目一:
    var a = "aa";
    function test() {
    
    
            console.log(a);
            var a = "bb";
            console.log(a);
        }
    test();
    alert(a);

Fügen Sie hier eine Bildbeschreibung ein

Nachdem die Vorkompilierung beendet ist, führen Sie zeilenweise aus:
Zuerst a = undefiniert im globalen  ——> "aa";

Der Aufruf test()wird zuerst ausgeführt console.log(a), da die lokale Variable a während der Vorkompilierung deklariert und kein Wert zugewiesen wird. Zu diesem Zeitpunkt a = undefinedist das Konsolendruckergebnis undefiniert. (Wenn die Testfunktion keine Variable enthält, wird sie während der Ausführung nachgeschlagen und die globale Variable a für die Ausgabe gefunden.)

Unmittelbar nach der lokalen Variablen a = im Test undefiniert   -> "bb";

Ausführung console.log(a), da der Variablen a gerade der Wert "bb" zugewiesen wurde, gibt die Konsole bb aus

Schließlich soll alert(a)hier der Umfang globaler und lokaler Variablen unterschieden werden. Offensichtlich wird das Ausführungsergebnis hier das Ergebnis anzeigen: aa

//题目二:
    (function() {
    
         
        var a = 5    
        function a() {
    
    }    
        console.log(a);

        function b() {
    
    }
        b = 6;
        console.log(b);
        var c = d = b;    
    })();
    console.log(d);
    console.log(c);

Fügen Sie hier eine Bildbeschreibung ein

Nachdem die Vorkompilierung beendet ist, führen Sie sie Zeile für Zeile aus:
a = Funktionskörper  ——> 5;

Führen Sie console.log (a) aus, Konsolendruck 5

b = Funktionskörper  -> 6;

Führen Sie console.log (a) aus, Konsolendruck 6

Führen Sie c = d = b aus, dh weisen Sie den Wert von c und d gleich 6 zu. (Hinweis: Das d hier wird nicht mit dem Schlüsselwort var deklariert und wird automatisch zu einem globalen Objekt.)

Die sofortige Ausführungsfunktion wird nach der Ausführung zerstört, aber d ist ein globales Objekt, sodass console.log (d) d finden und ausdrucken kann 6. Der Bereich von c befindet sich in der Sofortausführungsfunktion. Wenn die Sofortausführungsfunktion ausgeführt und zerstört wird, kann sie nicht global gefunden werden, sodass das Ergebnis ein Fehler ist Uncaught ReferenceError: c is not defined.

//题目三:
    var foo = {
    
    
            n: 1
        };
        (function(foo) {
    
    
            console.log(foo.n);//foo1
            foo.n = 3;
            var foo = {
    
     
                n: 2
            }
            console.log(foo.n);
        })(foo) 
    console.log(foo.n)

Fügen Sie hier eine Bildbeschreibung ein

Ausführung console.log(foo.n)Da die im Funktionskörper deklarierte lokale Variable foo das Attribut n nicht findet, aber der tatsächlich übergebene Parameter foo gefunden wird, wird 1 ausgegeben

Was später foo.n = 3geändert wird, ist der Attributwert des Attributs n im globalen foo-Objekt (da nur foo im globalen das Attribut n hat.) 1 wird 3

foo = {n:2} Foo wird neu zugewiesen (und in der Sofortausführungsfunktion neu deklariert, der Bereich ist in der Sofortausführungsfunktion wirksam).

console.log(foo.n)Ausgabe 2.

Die Funktion wird unmittelbar nach der Zerstörung ausgeführt, der lokale Bereich ist foo={n: 2}weg, die Ausgabe ist ein globales foo, diesmal foo = {n: 3}; also die Ausgabe 3.

Attribut n. ) 1 wird 3

foo = {n:2} Foo wird neu zugewiesen (und in der Sofortausführungsfunktion neu deklariert, der Bereich ist in der Sofortausführungsfunktion wirksam).

console.log(foo.n)Ausgabe 2.

Die Funktion wird unmittelbar nach der Zerstörung ausgeführt, der lokale Bereich ist foo={n: 2}weg, die Ausgabe ist ein globales foo, diesmal foo = {n: 3}; also die Ausgabe 3.

Supongo que te gusta

Origin blog.csdn.net/qq_35370002/article/details/108020464
Recomendado
Clasificación