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?

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.


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

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 )


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>

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.


Nur so kann ich den globalen Variablenwert in der Winkelkomponente ändern !!!
Padmaraj Bhat
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.