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.
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%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:
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%Der folgende Code gibt 12 aus, ich verstehe das, weil die var foo = 12; ersetzt die vorherige Deklaration der Variablen.
Sie haben Recht, weil die lokale Variable die globale überschreibt.
%Vor%Im folgenden Code wird 1 gemeldet, was bedeutet, dass die Variable deklariert ist Außerhalb der Funktion ist innerhalb der Funktion zugänglich.
Sie haben Recht. foo
deklariert im globalen Gültigkeitsbereich und ist daher von überall zugänglich.
%Vor%Aber, im folgenden Code, warum es undefiniert warnt ?? Ich dachte, es wird alert 1, ich weise gerade die zuvor deklarierte Variable zu Neues.
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:
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 ).
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).
Da die -Blockbereiche nicht vorhanden sind, kann eine lokale Variable nur deklariert werden, indem Sie sie in einem function body . 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. 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. Dies geschieht, weil in Javascript zwei verschiedene Schritte einer Variablendeklaration sind: Und das function3 Beispiel wird wie folgt:
Letzte Sache, variable Hebung.
Tags und Links javascript