Buenas tardes. Con este hilo propondré una posible solución del ejercicio de la entrega CU01167E del curso JavaScript desde cero.
EJERCICIO
Analiza este código JavaScript y responde a las preguntas:
<!DOCTYPE html>
<html><head><title>Ejemplo aprenderaprogramar.com</title><meta charset="utf-8">
<script type="text/javascript">
var target_date = new Date("Jan 1, 2089").getTime();
var days, hours, minutes, seconds;
function ejemplo() {
var countdown = document.getElementById("countdown");
setInterval(function () {
var current_date = new Date().getTime();
var seconds_left = (target_date - current_date) / 1000;
days = parseInt(seconds_left / 86400);
seconds_left = seconds_left % 86400;
hours = parseInt(seconds_left / 3600);
seconds_left = seconds_left % 3600;
minutes = parseInt(seconds_left / 60);
seconds = parseInt(seconds_left % 60);
countdown.innerHTML = 'Para el 1 de enero de 2089 faltan ' +days+ ' días, ' + hours + " horas, "
+ minutes + " minutos, " + seconds + " segundos";
}, 1000);
}
</script>
</head>
<body onload="ejemplo()" >
<div id="cabecera"><h2>Cursos aprenderaprogramar.com</h2><h3>Ejemplos JavaScript</h3>
<span id="countdown"></span></div>
</body></html>
a) Haz una lista de las variables que intervienen indicando para cada variable cuál es su nombre, cuál es su tipo, cuál es su cometido y si está definida como variable global o variable local.
Ejemplo: la variable target_date es de tipo Date, su cometido es almacenar la fecha futura respecto de la cual el script va a mostrar los días, horas, minutos y segundos que faltan para alcanzar dicha fecha, y está definida como variable global.
1) La variable days es de tipo Number, su cometido es almacenar los días que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.
2) La variable hours es de tipo Number, su cometido es almacenar las horas que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.
3) La variable minutes es de tipo Number, su cometido es almacenar los minutos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.
4) La variable seconds es de tipo Number, su cometido es almacenar los segundos que quedan hasta la fecha futura mediante un cálculo matemático y está definida como variable global.
5) La variable current_date es de tipo Date, su cometido es almacenar la fecha actual (en milisegundos), y está definida como variable local.
6) La variable seconds_left es de tipo Number, su cometido es almacenar los segundos restantes después de sacar los segundos que forman los días, horas y minutos. El resto son los segundos que quedan hasta la fecha futura. Está definida como variable local.
7) La variable countdown es de tipo Object, su cometido es acceder al elemento span. Está definida como variable global.
b) ¿Qué ocurre si definimos la variable current_date en el ámbito global en vez de dentro de la función? ¿Por qué ocurre esto?
Si definimos la variable current_date como variable global sólo se almacenará una vez la fecha actual (y el tiempo). De esta manera, al no llamarse continuamente mediante la función setInterval(funcion(){..},1000), no se almacenará cada segundo el tiempo y sólo nos mostrará el tiempo que queda hasta la fecha futura cuando carguemos la página, solamente una vez.
c) ¿Podríamos definir todas las variables como locales a la función y prescindir de las variables globales? Si se pudiera hacer, ¿crees que sería positivo para el diseño del código, su mantenimiento y ampliabilidad, o por el contrario, que sería negativo?
Sí se pondrán definir todas las variables como locales. Normalmente, en programación, cada función tiene su cometido y si definimos todas las variables como locales la función hará dos cometidos a la vez. Lo negativo sería que cargaremos mucho la memoria del compilador, porque cada vez que se invoque la función creará las variables, cuando podemos prescindir de ello y las variables que no se tengan que cambiar definirlas como globales.
d) ¿Qué métodos de los empleados en el código devuelven valores en milisegundos?
Los métodos que devuelven los valores en milisegundos son: .getTime(). Tanto en la variable global target_date como en la variable local current_date.
Gracias.