Como altero o valor de uma variável global dentro de uma função

131

Estou usando JavaScript e crio uma variável global. Eu o defino fora de uma função e quero alterar o valor da variável global de dentro de uma função e usá-lo de outra função, como faço isso?

NullPoiиteя
fonte

Respostas:

148

Basta referenciar a variável dentro da função; sem mágica, basta usar o nome. Se ele foi criado globalmente, você estará atualizando a variável global.

Você pode substituir esse comportamento declarando-o localmente var, mas se não o usar var, o nome de uma variável usada em uma função será global se essa variável tiver sido declarada globalmente.

É por isso que é considerado uma boa prática sempre declarar explicitamente suas variáveis var. Porque se você esquecer, pode começar a mexer com os globais por acidente. É um erro fácil de cometer. Mas, no seu caso, isso muda e se torna uma resposta fácil para sua pergunta.

Spudley
fonte
3
Isso não funciona para mim: country = 'foo' $ .ajax ({url: '/ some-endpoint', success: function (data) {country = data.country;}}); console.log (country) // gera 'foo'
Mark Simpson
41
@ MarkSimpson - a razão pela qual não funciona é que, no seu exemplo, ela console.logé executada imediatamente, mas a função de sucesso do ajax é executada apenas em algum momento depois quando a chamada ajax realmente retorna uma resposta. Este é um ponto fundamental sobre a natureza assíncrona do ajax: o código nas funções de fechamento não é executado em sequência com o código ao seu redor. É importante entender isso ao aprender sobre código orientado a eventos.
Spudley
A maneira de obter o console.log para ser mais preciso nesse caso seria colocá-lo na função de sucesso do ajax.
DWils
Outra das minhas idéias brilhantes: verifique a ortografia e o caso do nome da variável. É muito fácil perder algo tão simples como sessionId vs sessionID.
Julio
Eu tenho o mesmo problema com isso. Mas finalmente entendi, obrigado @Spudley!
Yudhistira Bayu 14/01/19
63
var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

alert("Value of 'a' outside the function " + a); //outputs 20
Chris
fonte
1
obrigado por este exemplo simples impressionante. A lógica disso estava me afetando. Só me acostumei com o pensamento 4d.
precisa saber é o seguinte
29

Basta usar o nome dessa variável.

No JavaScript, as variáveis ​​são locais apenas para uma função, se forem os parâmetros da função ou se você as declarar como locais explicitamente, digitando a varpalavra - chave antes do nome da variável.

Se o nome do valor local tiver o mesmo nome que o valor global, use o windowobjeto

Veja este 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

Editar

Com o ES2015, surgiram mais duas palavras const- chave e let, que também afetam o escopo de uma variável ( especificação de idioma )

yunzen
fonte
1
+1 para descrever a colisão de nomes entre a variável global e a declarada localmente e como acessá-la.
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
fonte
Só não use a varpalavra-chave dentro da função, então você não tem que lidar comdocument.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

Com window ['variableName'] ou window.variableName, você pode modificar o valor de uma variável global dentro de uma função.

Sterling Diaz
fonte
Esta é a única maneira que eu poderia alterar o valor da variável global no componente angular !!!
Padmaraj Bhat 14/02