Wie ändere ich den Wert einer globalen Variablen innerhalb einer Funktion?

130

Ich verwende JavaScript und erstelle eine globale Variable. Ich definiere es außerhalb einer Funktion und möchte den globalen Variablenwert innerhalb einer Funktion ändern und von einer anderen Funktion aus verwenden. Wie mache ich das?

NullPoiиteя
quelle

Antworten:

147

Verweisen Sie einfach auf die Variable innerhalb der Funktion. Keine Magie, benutze einfach den Namen. Wenn es global erstellt wurde, aktualisieren Sie die globale Variable.

Sie können dieses Verhalten überschreiben, indem Sie es lokal mit deklarieren. varWenn Sie es jedoch nicht verwenden var, ist ein in einer Funktion verwendeter Variablenname global, wenn diese Variable global deklariert wurde.

Aus diesem Grund wird es als bewährte Methode angesehen, Ihre Variablen immer explizit mit zu deklarieren var. Denn wenn Sie es vergessen, können Sie versehentlich anfangen, sich mit Globals herumzuschlagen. Es ist leicht, einen Fehler zu machen. In Ihrem Fall dreht sich dies jedoch um und wird zu einer einfachen Antwort auf Ihre Frage.

Spudley
quelle
3
Dies funktioniert bei mir nicht: country = 'foo' $ .ajax ({url: '/ some-endpoint', success: function (data) {country = data.country;}}); console.log (country) // gibt 'foo' aus
Mark Simpson
41
@MarkSimpson - Der Grund, warum es nicht funktioniert, ist, dass in Ihrem Beispiel das console.logsofort ausgeführt wird, die Ajax-Erfolgsfunktion jedoch erst zu einem späteren Zeitpunkt ausgeführt wird, wenn der Ajax-Aufruf tatsächlich eine Antwort zurückgibt. Dies ist ein grundlegender Punkt in Bezug auf die Asynchronität von Ajax: Code in Schließfunktionen wird nicht in der Reihenfolge mit dem Code um ihn herum ausgeführt. Dies ist wichtig zu verstehen, wenn Sie sich mit ereignisgesteuertem Code vertraut machen.
Spudley
Die Möglichkeit, das console.log in diesem Fall genauer zu machen, besteht darin, es in die Ajax-Erfolgsfunktion einzufügen.
DWils
Eine weitere meiner brillanten Erkenntnisse: Überprüfen Sie die Schreibweise und die Groß- und Kleinschreibung des Variablennamens. Es ist sehr leicht, etwas so Einfaches wie sessionId vs sessionID zu übersehen.
Whitebeard
Ich habe das gleiche Problem bei diesen. Aber endlich verstanden, danke @Spudley!
Yudhistira Bayu
62
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20
Chris
quelle
1
Vielen Dank für dieses tolle einfache Beispiel. Die Logik dafür war, dass ich mich an das 4d-Denken gewöhnen musste.
Mikey3Strings
29

Verwenden Sie einfach den Namen dieser Variablen.

In JavaScript sind Variablen nur lokal für eine Funktion, wenn sie die Parameter der Funktion sind oder wenn Sie sie explizit als lokal deklarieren, indem Sie das varSchlüsselwort vor dem Namen der Variablen eingeben .

Wenn der Name des lokalen Werts denselben Namen wie der globale Wert hat, verwenden Sie das windowObjekt

Siehe diese jsfiddle

x = 1;
y = 2;
z = 3;

function a(y) {
  // y is local to the function, because it is a function parameter
  console.log('local y: should be 10:', y); // local y through function parameter
  y = 3; // will only overwrite local y, not 'global' y
  console.log('local y: should be 3:', y); // local y
  // global value could be accessed by referencing through window object
  console.log('global y: should be 2:', window.y) // global y, different from local y ()

  var x; // makes x a local variable
  x = 4; // only overwrites local x
  console.log('local x: should be 4:', x); // local x
  
  z = 5; // overwrites global z, because there is no local z
  console.log('local z: should be 5:', z); // local z, same as global
  console.log('global z: should be 5 5:', window.z, z) // global z, same as z, because z is not local
}
a(10);
console.log('global x: should be 1:', x); // global x
console.log('global y: should be 2:', y); // global y
console.log('global z: should be 5:', z); // global z, overwritten in function a

Bearbeiten

Mit ES2015 kam es zwei weitere Keywords constund let, die auch den Umfang einer Variablen (beeinflussen Language Specification )

Yunzen
quelle
1
+1 zur Beschreibung der Namenskollision zwischen der globalen und der lokal deklarierten Variablen und zum Zugriff darauf.
GDBJ
6
<script>
var x = 2; //X is global and value is 2.

function myFunction()
{
 x = 7; //x is local variable and value is 7.

}

myFunction();

alert(x); //x is gobal variable and the value is 7
</script>
Iman Sedighi
quelle
Verwenden varSie einfach nicht das Schlüsselwort innerhalb der Funktion, dann müssen Sie sich nicht damit befassendocument.getElementById("outside").value = x;
Ben Aubin
5
var a = 10;

myFunction(a);

function myFunction(a){
   window['a'] = 20; // or window.a
}

alert("Value of 'a' outside the function " + a); //outputs 20

Mit window ['variableName'] oder window.variableName können Sie den Wert einer globalen Variablen innerhalb einer Funktion ändern.

Sterling Diaz
quelle
Nur so kann ich den globalen Variablenwert in der Winkelkomponente ändern !!!
Padmaraj Bhat