Ver Mensaje Individual
  #3 (permalink)  
Antiguo 18/11/2020, 16:42
prueba230683
 
Fecha de Ingreso: abril-2011
Mensajes: 170
Antigüedad: 13 años
Puntos: 68
Respuesta: Cambiar valor de una variable con una funcion interna

Una opción es usar promesas como indica @Alexis88, pero se puede resolver de una forma más sencilla.

Cuando declaras la variable y como parámetro de la función f1, estás creando una variable local que nada tiene que ver con la variable y que habías definido arriba (en el scope global). Por tanto, los cambios que efectúes sobre esta variable local solamente serán visibles dentro de la función f1.

No obstante, si lo que quieres no es modificar la variable y local, sino la variable y global, deberás anteponer window.:

Código Javascript:
Ver original
  1. /* esto es el scope global */
  2. var x = 10;
  3. var y = 20; // al ser una variable global, la podemos referenciar como window.y
  4. function f1(y){
  5.   /* este es el scope local de la funcion f1 */
  6.   x = x + y;
  7.   f2();
  8.   function f2(){
  9.     window.y = y + 5; // cambiamos el valor de la variable global y
  10.   }
  11. }
  12. f1(x);
  13. alert(x); //20
  14. alert(y); //15

Este problema no lo tendrías si hubieras utilizado un nombre distinto de "y" para el parámetro de la función f1.

Código JavaScript:
Ver original
  1. /* esto es el scope global */
  2. var x=10;
  3. var y=20;
  4. function f1(z){ // ponemos otro nombre, por ej. z
  5.   /* este es el scope local de la funcion f1 */
  6.   x=x+z;
  7.   f2();
  8.   function f2(){
  9.     y = z+5; // como no una hay variable "y" declarada en f1, accede a la del scope superior (en este caso, el scope global)
  10.   }
  11. }
  12. f1(x);
  13. alert(x);//20
  14. alert(y);//15

Como habrás podido ver, el intérprete de JavaScript busca las variables desde abajo hacia arriba. Si intentas acceder a una variable X pero no la encuentra en el scope actual, buscará en el scope superior. Si llega al scope global y no encuentra la variable, lanzará un error: Reference Error: X is not defined.

Te recomiendo la siguiente lectura: https://yeisondaza.com/entendiendo-s...-en-javascript

Saludos