Hallo Leute, ich habe eine einfache Funktion und eine globale Variable.
%Vor%Warum ist
myname
undefined
und nicht die Zeichenkette"global"
?
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?
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
.
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.
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.
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.
Tags und Links javascript global-variables local-variables hoisting