1

Como indica el título, quiero modificar una variable global desde una función sin acceder a la misma directamente, quedando así:

var a = 5;

console.log(a);

midificaVariable(a);

console.log(a);

function modificaVariable(b)
{
    b--;
}

la variable a en el primer log tendría un valor de 5 y en el segundo log un valor de 4.

La idea de esto es usar una función para editar distintas variables independientemente del nombre de las mismas.


Si la variable a es un objeto o un arreglo, cuando se pone como argumento se crea una referencia, haciendo que si yo modifico la referencia, estoy modificando la variable global.

Jorgesys
  • 103,630
  • 13
  • 52
  • 124
Andres
  • 355
  • 1
  • 11
  • puedes acceder por el objeto [window](https://es.stackoverflow.com/a/290555/28035) pero esto solo es para navegadores, de igual forma no es buena practica modificar las variables globales en metodos, creo que deberias explicar mejor la pregunta de lo que quieres – JackNavaRow Dec 18 '19 at 18:38

2 Answers2

3

Si la función "modificaVariable" lo que hace es modificar a "a", lo más sencillo y rápido que se me ocurre es que devuelvas el valor que deberá tener, es decir, algo así:

var a = 5;

console.log(a);
a = modificaVariable(a);
console.log(a);

function modificaVariable(b){
    return --b;
}

Mostrará en pantalla

5
4
ManuelV
  • 507
  • 2
  • 3
1

Para poder ejecutar la función, si o si sabrás como se llama la variable global, así que esta función de ejemplo se adaptaría al requerimiento, ya que esta en ningún momento sabe el nombre de la variable.

var a = 5;

var modificaVariable = function(nombreVariable, variable) {
    variable--;
    window[nombreVariable] = variable;
};

modificaVariable('a', a);
console.log(a);
jolsalazar
  • 2,512
  • 1
  • 6
  • 13