Búsqueda de sitios web

javascript - ¿Cómo cambio el valor de una variable global dentro de una función?


Estoy usando JavaScript y creo una variable global. La defino fuera de una función y quiero cambiar el valor de la variable global desde dentro de una función y usarlo desde otra función, ¿cómo hago esto?

Respuesta #1

Solo referencia la variable dentro de la función; sin magia, solo usa su nombre. Si se ha creado globalmente, entonces estarás actualizando la variable global.

Puedes anular este comportamiento declarándolo localmente usando var, pero si no usas var, entonces un nombre de variable usado en una función será global si esa variable ha sido declarada globalmente.

Es por eso que se considera una buena práctica declarar siempre tus variables explícitamente con var. Porque si te olvidas, puedes empezar a manipular las variables globales por accidente. Es un error fácil de cometer. Pero en tu caso, esto se convierte en una respuesta sencilla a tu pregunta.

Respuesta #2

var a = 10;

myFunction();

function myFunction(){
   a = 20;
}

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

Respuesta #3

Solo usa el nombre de esa variable.

En JavaScript, las variables son locales únicamente a una función, si son el/los parámetro(s) de la función o si las declaras como locales explícitamente escribiendo la palabra clave var antes del nombre de la variable.

Si el nombre del valor local tiene el mismo nombre que el valor global, use el objeto window

Ver 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:', window.z) // global z, same as z, because z is not local
}
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 3:', z); // global z
a(10)
console.log('global x: should be 1:', x); // global x, unaltered
console.log('global y: should be 2:', y); // global y, unaltered
console.log('global z: should be 5:', z); // global z, overwritten in function a

Editar

Con ES2015 llegaron dos palabras clave más const y let, que también afectan al alcance de una variable (Especificación del Lenguaje)

Respuesta #4

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['variableName'] o window.variableName puedes modificar el valor de una variable global dentro de una función.

Artículos relacionados