soy un principiante en javascript y traté de aprender sobre la función que llama dentro de una función que redefine el valor de una variable. aquí está el código
var a; function app2(a) { var a = 8; return a } function app(a) { var a = 7; app2(a) return a } console.log(app(a)); cuando ejecuto el código, todavía muestra 7 como salida. Pensé que serían 8 porque llamé a la función app2 en la función de la app . ¿Por qué el valor no cambia a 8? y ¿qué debo hacer para actualizar el valor de la variable dentro de la función anidada? gracias de antemano
1) Solo puede obtener 8 si está tomando el valor de app2 y usándolo dentro de la app .
Las variables declaradas con la palabra clave var tienen un alcance de función y no son visibles fuera de esa función particular en la que se declara.
a declarado en la app2 no es visible dentro de la app a menos que no devuelva el valor de la app2 y no use el valor de app2 de la aplicación 2 dentro de la app (ambas condiciones deben cumplirse para usarla)
var a; function app2(a) { var a = 8; return a; } function app(a) { var a = 7; a = app2(a); // reassign the returned value from app2 return a; } console.log(app(a));2) Si lo devuelve y no lo captura, entonces no sirve de nada. También puedes hacer como:
var a; function app2(a) { var a = 8; return a; } function app(a) { var a = 7; return app2(a); // Directly return the value of app2 returned value } console.log(app(a));Creo que el principal culpable de lo que está viendo es que está nombrando los argumentos de las funciones a y también el global se llama a . Al experimentar con esto, esperaría a = 8 cuando se eliminen todas las palabras clave var excepto la global. Esto no sucede porque el argumento, denominado a , oculta la var a . Cuando usa la palabra clave var localmente en una función, esencialmente le está diciendo a javascript que desea declarar una var a con alcance de función local, y no hacer referencia a la var a global, de modo que cualquier cambio permanezca en el alcance de la función.
Mira este fragmento:
var a; function app2(b) { // changed argument name from `a` to `b` a = 8; // removed var keyword here return a } function app(b) { // changed argument name from `a` to `b` a = 7; // removed var keyword here app2(a) return a } console.log(app(a)); // output: 8