Come posso modificare il valore di una variabile globale all'interno di una funzione


131

Sto usando JavaScript e creo una variabile globale. Lo definisco al di fuori di una funzione e voglio cambiare il valore della variabile globale dall'interno di una funzione e usarlo da un'altra funzione, come posso fare?

Risposte:


148

Basta fare riferimento alla variabile all'interno della funzione; nessuna magia, basta usare il suo nome. Se è stato creato a livello globale, aggiornerai la variabile globale.

È possibile ignorare questo comportamento dichiarandolo localmente utilizzando var, ma se non lo si utilizza var, un nome di variabile utilizzato in una funzione sarà globale se tale variabile è stata dichiarata a livello globale.

Ecco perché è considerata la migliore pratica dichiarare sempre esplicitamente le variabili var. Perché se lo dimentichi, puoi iniziare a fare casini con i globi per caso. È un errore facile da fare. Ma nel tuo caso, questo si gira e diventa una risposta facile alla tua domanda.


3
Questo non funziona per me: country = 'foo' $ .ajax ({url: '/ some-endpoint', successo: funzione (dati) {country = data.country;}}); console.log (paese) // genera 'pippo'
Mark Simpson il

41
@MarkSimpson - il motivo per cui non funziona è perché nel tuo esempio console.logviene eseguito immediatamente, ma la funzione di successo ajax viene eseguita solo in un momento successivo quando la chiamata ajax restituisce effettivamente una risposta. Questo è un punto fondamentale sulla natura asincrona di ajax: il codice nelle funzioni di chiusura non viene eseguito in sequenza con il codice che lo circonda. Questo è importante da comprendere quando si impara a conoscere il codice guidato dagli eventi.
Spudley,

Il modo per rendere console.log più preciso in questo caso sarebbe quello di inserirlo nella funzione di successo di Ajax.
DWils

Un'altra mia brillante intuizione: ricontrolla l'ortografia e il caso del nome della variabile. È molto facile perdere qualcosa di semplice come sessionId vs sessionID.
Barbabianca,

Ho lo stesso problema su questi. Ma finalmente capito, grazie @Spudley!
Yudhistira Bayu,

63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

1
grazie per questo fantastico semplice esempio. La logica di questo stava facendo la mia testa. Devo solo abituarmi al pensiero 4d.
Mikey3Strings

29

Usa semplicemente il nome di quella variabile.

In JavaScript, le variabili sono locali solo per una funzione, se sono i parametri della funzione o se le dichiarate come locali esplicitamente digitando la varparola chiave prima del nome della variabile.

Se il nome del valore locale ha lo stesso nome del valore globale, utilizzare l' windowoggetto

Vedi questo 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

modificare

Con ES2015 sono arrivate altre due parole chiave conste letche influiscono anche sull'ambito di una variabile ( specifica della lingua )


1
+1 per la descrizione della collisione del nome tra la variabile globale e quella dichiarata localmente e come accedervi.
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>

Basta non usare la varparola chiave all'interno della funzione, quindi non devi occuparti didocument.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

Con window ['variabileNome'] o window.variableName è possibile modificare il valore di una variabile globale all'interno di una funzione.


Questo è l'unico modo in cui ho potuto modificare il valore della variabile globale nella componente angolare !!!
Padmaraj Bhat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.