Buenas, ejercicio CU01190E del curso JavaScript desde cero.
A partir del siguiente código:
<!DOCTYPE html>
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
var x = 'Hola amigos'; // variable global
function ejemplo(){
alert( x ); // esperamos el valor global
var x;
x = 'Saludos desde Costa Rica'; // redefinimos la variable en contexto local
alert( x ); // esperamos el nuevo valor local
}
</script></head>
<body><div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3></div>
<div style="color:blue;" id ="pulsador" onclick="ejemplo()"> Probar </div>
</body></html>
a) Realiza una prueba pulsando en “Probar”. ¿Qué resultados obtienes? ¿Cómo se explican esos resultados?
El primer alert muestra 'undefined' y el segundo 'Saludos desde Costa Rica'. Esta linea 'var x;' dentro de la función lo que hace es que sobreescribe la variable global 'x', así que al no darle ningún valor a x, toma como valor 'undefined'.
b) Cambia el código y declara la variable x dentro de la función al mismo tiempo que la inicializas. ¿Qué resultados obtienes? ¿Cómo se explican esos resultados?
Si la linea 'var x;' que se encuentra dentro de la función, la cambiamos por esta 'var x='Hola';'. Se siguen obteniendo los mismos resultados.Sigue dando 'undefined' porque el valor que le damos a x, se lo damos después del primer alert.
c) De los dos casos anteriores ( a y b ). ¿En cuáles se produce hoisting: en el a), en el b) ó en ambos?
En ambos.
d) En este caso, ¿el hoisting está afectando a los resultados obtenidos? ¿Por qué? ¿Cuáles serían los resultados de ejecutar estos códigos si no existiera hoisting?
Si. Porque al existir el hosting, provoca que la variable x se sobreescriba nada mas empezar la función. Al ejecutar el código, si no existiera el hosting, se mostraría 'Hola amigos' y después 'Saludos desde Costa Rica'. Esto sucedería así porque el primer alert, mostraría el valor de la variable global x.
Saludos.