He estado aprendiendo Javascript usando Object-Oriented JavaScript by Stoyan Stefanoventendimiento global y alcance local en Javascript
Se ofrece un ejemplo comparando el alcance global y local:
var a = 123;
function f() {
alert(a);
var a = 1;
alert(a);
}
f();
En cuanto a este ejemplo, me espera a la primera alerta ser '123' y la segunda alerta ser '1'. He aquí que, Stoyan dice:
se podría esperar que la primera alerta() mostrará 123 (el valor de la variable global a) y el segundo mostrará 1 (lo local a). Este no es el caso. La primera alerta mostrará "indefinido". Esto es porque dentro de la función el alcance local es más importante que el alcance global . Entonces una variable local sobrescribe cualquier variable global con con el mismo nombre. En el momento de la primera alerta() a aún no se había definido (de ahí el valor indefinido) pero aún existía en el espacio local.
La explicación no era clara para mí, ¿cómo puede la variable local sobrescribir la variable global en la primera alerta? Cualquier otra/diferente explicación sería apreciada.
Gracias Juan. Supongo que usted discrepará con el uso de los autores del término sobrescribir. Empecé a pensar que era un nombre inapropiado b/c si llamo alerta (a) fuera de la función, obtengo '123', lo que sugiere que no se sobreescriben sino dos variables 'a', una global y una local. –
Anular no es el término correcto, la variable local ** sombrea ** la variable global, pero el problema real es entender que si tiene una 'var' en cualquier lugar dentro de la función, el global está ** sombreado ** en todo el toda la función, incluso antes de que sea declarada. –
gracias, esto es útil y aclarando –