Sie haben stolperte auf einer js „Feature“ genannt
var myname = "global"; // global variable
function func() {
alert(myname); // "undefined"
var myname = "local";
alert(myname); // "local"
}
func();
In diesem Code Hissen, wenn Sie func
der Compiler in der Funktion Körper sieht definieren. Sie sehen, dass Sie eine Variable namens myname
deklarieren.
Javascript Hoists Variable und Funktionsdeklarationen, durch die Erklärung an die Spitze der Funktion zu bewegen.
Wegen des Hochfahrens wird Ihr Code in das Folgende geschrieben.
Diese "Deckt" die globale Variable. Wenn Sie im Rahmen einer Funktion auf die globale Variable zugreifen möchten, verwenden Sie das Schlüsselwort this
.
var myname = "global"; // global variable
function func() {
var myname = "local";
alert(this.myname); // "global"
alert(myname); // "local"
}
func();
Beachten Sie, dass dies nur funktioniert, in einer Funktion keine Methode oder Konstruktor aufrufen, weil das this
Schlüsselwort ändert, was zu seiner gebundenen je nachdem, wie Sie eine Funktion aufrufen.
EDIT: Für Vollständigkeit
Wenn Sie Zugriff auf globale Variablen in jedem Kontext erhalten möchten, unabhängig von Funktion Typ dann eine globale Variable erklären, dass Sie nie abdecken durch Konvention.
var global = this; // in global scope.
var myname = "global";
var obj = {f: function() {
var myname = "local";
console.log(global.myname);
}};
obj.f(); // "global"
Hinweis, dass diese in Verfahren Position befindet und die this
Schlüsselwort bezieht sich direkt auf obj und muss daher nicht myname definiert.
Ich denke, Sie haben 'var' auf der globalen Variablen vergessen – crc442
Ich glaube @ Crc442 ist richtig. Können Sie Ihre Fehlermeldung zur Bestätigung posten? – mas4
@ crc442 - ich glaube, Sie wissen nicht, worüber Sie reden –