Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: pedro,, en 17 de Febrero 2016, 23:16

Título: JavaScript no funciona la variable sale undefined Elevacion o hoisting CU01190E
Publicado por: pedro,, en 17 de Febrero 2016, 23:16
Buenas, ejercicio CU01190E del curso JavaScript desde cero.

A partir del siguiente código:

Código: [Seleccionar]
<!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>

Citar
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'.

Citar
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.

Citar
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.

Citar
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.
Título: Re:Elevacion o hosting JavaScript. Ejercicio CU01190E
Publicado por: César Krall en 20 de Febrero 2016, 13:49
Hola!

Cuidado porque hosting es una cosa y hoisting otra y no tienen nada que ver :)

a) Aparentemente debería mostrarnos "Hola amigos". ¿Por qué no lo hace? Por la elevación o hoisting de variables que hace JavaScript explicada en el curso:

Debido a que JavaScript realiza el izado o elevación de las declaraciones de variables, el intérprete JavaScript ejecutará el código como si dicha declaración se encontrara en la primera línea de la función

b) El hoisting afecta sólo a la declaración de variables. Si hacemos una declaración-inicialización, se realiza el izado sólo de la declaración. Esto puede generar resultados aparentemente extraños.

c) En ambos

d) ok

Este ejercicio nos muestra lo peligroso que puede ser repetir nombres de variables. Una forma de solucionarlo, o al menos de intentarlo, es crear espacios de nombres, además de tener cuidado

Saludos!
Título: Re:JavaScript no funciona la variable sale undefined Elevacion o hoisting CU01190E
Publicado por: pedro,, en 20 de Febrero 2016, 23:27
Hola, tienes razón.

Mi cerebro de momento está mas acostumbrado a hosting que a hoisting. Pero lo tendré en cuenta para que no se me olvide.

Gracias como siempre César.