Javascript-Variable Hochziehen

7

Das ist ein einfacher Ausschnitt, ich verstehe einfach nichts.

Der folgende Code gibt 12 aus, ich verstehe das, weil var foo = 12; die vorherige Deklaration der Variable ersetzt.

%Vor%

Im folgenden Code wird 1 gemeldet, was bedeutet, dass die außerhalb der Funktion deklarierte Variable innerhalb der Funktion zugänglich ist.

%Vor%

Aber im unteren Code, warum es undefiniert warnt ?? Ich dachte, es wird alarm 1 , ich ordne nur die zuvor deklarierte Variable dem neuen zu.

%Vor%     
Abhinav 05.11.2015, 09:22
quelle

5 Antworten

6

Variablendeklarationen werden an den Anfang der Funktion übergeben.

Daher passiert in Wirklichkeit folgendes:

%Vor%

Daher müssten Sie dies so ändern, dass window.foo verwendet wird, sodass Sie auf die globale Eigenschaft und nicht auf die Eigenschaft der Funktion verweisen:

%Vor%     
Curt 05.11.2015, 09:29
quelle
4

Das Heben ist ein wenig schwierig. Funktionsdeklarationen werden mit der Funktionszuordnung gehisst, aber Variablendeklarationen werden ohne die Variablenzuordnung gehisst. Die Ausführungsreihenfolge des Codes ist also tatsächlich:

%Vor%

Sie könnten entweder window.foo verwenden, wenn Sie auf die globale Variable foo verweisen möchten, oder besser, verwenden Sie einfach einen anderen Variablennamen:

%Vor%     
nils 05.11.2015 09:31
quelle
3
  

Der folgende Code gibt 12 aus, ich verstehe das, weil die var foo =   12; ersetzt die vorherige Deklaration der Variablen.

%Vor%

Sie haben Recht, weil die lokale Variable die globale überschreibt.

  

Im folgenden Code wird 1 gemeldet, was bedeutet, dass die Variable deklariert ist   Außerhalb der Funktion ist innerhalb der Funktion zugänglich.

%Vor%

Sie haben Recht. foo deklariert im globalen Gültigkeitsbereich und ist daher von überall zugänglich.

  

Aber, im folgenden Code, warum es undefiniert warnt ?? Ich dachte, es wird   alert 1, ich weise gerade die zuvor deklarierte Variable zu   Neues.

%Vor%

Das ist ein bisschen anders. Sie deklarieren eine globale Variable und eine lokale Variable mit demselben Namen. Wenn Ihre JavaScript-Programmausführung eine neue Funktion eingibt, werden alle Variablen, die irgendwo in der Funktion deklariert sind, an den Anfang der Funktion verschoben (oder erhöht oder hochgezogen).

Ein anderes Beispiel:

%Vor%
    
Alex Char 05.11.2015 09:41
quelle
3

In JavaScript wird der Bereich bis zur ES5-Spezifikation nur in Bezug auf function body implementiert. Das Konzept des block scope existiert nicht ( wirklich , wird im nächsten Javascript mit dem let Schlüsselwort implementiert).

Wenn Sie also eine Variable var something; outside vom Funktionskörper deklarieren, wird sie global sein (im globalen Bereich des Browsers ist der Bereich des Objekts window ).

  1. globale Variablen

%Vor%

Wenn Ihr Code nicht in strict mode ausgeführt wird gibt es eine andere Möglichkeit, eine globale Variable zu deklarieren: das var Schlüsselwort wegzulassen. Wenn das Schlüsselwort var fehlt, gehört die Variable zum globalen Bereich (oder wird verschoben).

  1. Beispiel:

%Vor%

Lokale Variablen

Da die -Blockbereiche nicht vorhanden sind, kann eine lokale Variable nur deklariert werden, indem Sie sie in einem function body .

  1. Beispiel

%Vor%

Wie Sie in diesem Beispiel sehen können, existieren lokale Variablen nicht außerhalb ihres Gültigkeitsbereichs. Das bedeutet eine andere Sache ... Wenn Sie mit dem Schlüsselwort var die gleiche Variable in zwei verschiedenen Bereichen deklarieren, erhalten Sie zwei verschiedene Variablen, keine Überschreibung der gleichen Variablen (Name), die in der Definition definiert ist übergeordneter Bereich.

Wenn Sie dieselbe Variable in einem untergeordneten Bereich überschreiben möchten, müssen Sie sie ohne das Schlüsselwort var verwenden. Wegen der Geltungsbereichskette , wenn eine Variable nicht existiert In einem lokalen Bereich wird nach dem übergeordneten Bereich gesucht.

  1. Beispiel

%Vor%

Letzte Sache, variable Hebung.

Wie ich unten geschrieben habe, gibt es momentan keine Möglichkeit, eine Variable in einem Punkt Ihres Codes zu deklarieren. Es wird immer am Anfang des Gültigkeitsbereichs deklariert.

  1. Beispiel

%Vor%

Dies geschieht, weil in Javascript zwei verschiedene Schritte einer Variablendeklaration sind:

  • Definition
  • Initialisierung

Und das function3 Beispiel wird wie folgt:

%Vor%
    
Hitmands 05.11.2015 10:13
quelle
2

IMHO hat es nichts mit der Deklaration und dem Heben von Funktionen zu tun,

Deklaration der Var mit var Inside-Funktion Sie erstellen eine Variable im isolierten Bereich der Funktion, deshalb werden Sie undefiniert.

%Vor%

Geige

    
maioman 05.11.2015 09:42
quelle

Tags und Links