Comment changer la valeur d'une variable globale à l'intérieur d'une fonction


131

J'utilise JavaScript et je crée une variable globale. Je le définis en dehors d'une fonction et je souhaite modifier la valeur de la variable globale depuis l'intérieur d'une fonction et l'utiliser à partir d'une autre fonction, comment faire?

Réponses:


148

Faites simplement référence à la variable à l'intérieur de la fonction; pas de magie, utilisez simplement son nom. S'il a été créé globalement, vous mettrez à jour la variable globale.

Vous pouvez remplacer ce comportement en le déclarant localement en utilisant var, mais si vous ne l'utilisez pas var, alors un nom de variable utilisé dans une fonction sera global si cette variable a été déclarée globalement.

C'est pourquoi il est recommandé de toujours déclarer vos variables explicitement avec var. Parce que si vous l'oubliez, vous pouvez commencer à jouer avec les globaux par accident. C'est une erreur facile à faire. Mais dans votre cas, cela se retourne et devient une réponse facile à votre question.


3
Cela ne fonctionne pas pour moi: country = 'foo' $ .ajax ({url: '/ some-endpoint', success: function (data) {country = data.country;}}); console.log (country) // affiche 'foo'
Mark Simpson

41
@MarkSimpson - la raison pour laquelle cela ne fonctionne pas est que dans votre exemple, le console.logest exécuté immédiatement, mais la fonction de succès ajax ne s'exécute qu'à un moment donné plus tard, lorsque l'appel ajax renvoie réellement une réponse. C'est un point fondamental sur la nature asynchrone d'ajax: le code dans les fonctions de fermeture ne s'exécute pas en séquence avec le code qui l'entoure. C'est un élément important à comprendre lors de l'apprentissage du code événementiel.
Spudley

La manière d'obtenir le console.log pour être plus précis dans ce cas serait de le mettre dans la fonction de succès ajax.
DWils

Une autre de mes idées brillantes: vérifiez l'orthographe et la casse du nom de la variable. Il est très facile de rater quelque chose d'aussi simple que sessionId vs sessionID.
barbe

J'ai le même problème sur ces derniers. Mais enfin compris, merci @Spudley!
Yudhistira Bayu le

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

1
merci pour cet exemple simple et génial. La logique de cela me faisait la tête. Je viens de m'habituer à la pensée 4d.
Mikey3Strings

29

Utilisez simplement le nom de cette variable.

En JavaScript, les variables ne sont locales que pour une fonction, si ce sont les paramètres de la fonction ou si vous les déclarez explicitement comme locales en tapant le varmot - clé avant le nom de la variable.

Si le nom de la valeur locale a le même nom que la valeur globale, utilisez l' windowobjet

Voir ce 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

Éditer

Avec ES2015, il y avait deux autres mots const- clés et let, qui affectent également la portée d'une variable ( spécification de la langue )


1
+1 pour décrire la collision de noms entre la variable globale et la variable déclarée localement et comment y accéder.
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>

N'utilisez pas le varmot - clé à l'intérieur de la fonction, vous n'avez pas à vous en occuperdocument.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

Avec window ['variableName'] ou window.variableName vous pouvez modifier la valeur d'une variable globale à l'intérieur d'une fonction.


C'est la seule façon de changer la valeur de la variable globale en composante angulaire !!!
Padmaraj Bhat le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.