Warum ist eine Variable definiert global nicht definiert? [Duplikat]

8

Hallo Leute, ich habe eine einfache Funktion und eine globale Variable.

  

Warum ist myname undefined und nicht die Zeichenkette "global" ?

%Vor%

Ist es nicht möglich, auf eine äußere Variable zu verweisen, die außerhalb des Bereichs dieser Funktion definiert ist? und darin eine globale Variable ...

Und wie kann ich das beheben, damit ich nicht undefined von einer globalen Variable bekomme?

    
J Rod 26.05.2015, 22:05
quelle

4 Antworten

19

Sie sind gerade auf ein js "feature" namens hosting gestoßen

%Vor%

In diesem Code sieht der Compiler bei der Definition von func den Funktionskörper. Sie sehen, dass Sie eine Variable namens myname deklarieren.

  

JavaScript Hoists Variablen- und Funktionsdeklarationen, indem Sie die Deklaration an den Anfang der Funktion verschieben.

Wegen des Hochziehens wird Ihr Code in folgendes umgeschrieben.

%Vor%

Dies "deckt" die globale Variable ab. Wenn Sie im Rahmen einer Funktion auf die globale Variable zugreifen möchten, verwenden Sie das Schlüsselwort this .

%Vor%

Beachten Sie, dass dies nur beim Aufruf einer Funktion und nicht einer Methode oder eines Konstruktors funktioniert, da das Schlüsselwort this abhängig davon, wie Sie eine Funktion aufrufen, das gebundene Element ändert.

BEARBEITEN: Zur Vollständigkeit

Wenn Sie unabhängig vom Funktionstyp Zugriff auf globale Variablen in einem beliebigen Kontext erhalten möchten, deklarieren Sie eine globale Variable, die Sie per Konvention niemals abdecken.

%Vor%

Beachten Sie, dass sich dies in der Methodenposition befindet und das Schlüsselwort this sich direkt auf obj bezieht und daher nicht meinName definiert ist.

    
t3dodson 26.05.2015, 22:12
quelle
3

Innerhalb einer Funktion deklarieren Sie var myname = "local" . Auch wenn Sie es in der Mitte der Methode tun, hat diese Variable den Funktionsumfang, also gehört sie zur gesamten Funktion, sogar der Code darüber.

Also ist der Wert der lokalen Variablen vor dieser Zeile undefiniert und hat einen Wert nach, aber keiner der Variablen berührt die globale Variable.

    
Joe Enos 26.05.2015 22:12
quelle
0

Der Grund dafür, dass die erste Warnung nicht definiert ist, liegt daran, dass Sie global in der Funktion als lokale Variable darunter deklariert haben. Und in Javascript, das heißt von der Spitze der Funktion wird es als lokale Variable betrachtet.

Der darunterliegende funktioniert, weil Sie oberhalb der Warnung einen Wert angegeben haben.

    
Andrew 26.05.2015 22:12
quelle
-1

Sie vergessen "var" in der ersten Zeile:

%Vor%

Das Hochziehen bezieht sich einfach auf die Tatsache, dass Javascript durchläuft und alle Variablen, die initialisiert werden, auf den Wert undefined (keine Zeichenfolge) setzt

    
DUUUDE123 26.05.2015 22:13
quelle