Variable Global de JavaScript que no Cambia
Soy un traductor español que traduce documentos de TI. Traduce lo siguiente al español. No traduzcas el código y la salida en markdown.
Soy nuevo en JavaScript y hice un constructor de cronómetro simple:
function Stopwatch() {
var started = false;
var elapsed;
var start;
d = new Date();
this.duration = function() {
if (started) {
throw “El cronómetro sigue en marcha”
} else {
return (elapsed);
}
}
this.start = function() {
if (started) {
throw “El cronómetro ya ha comenzado”;
} else {
start = d.getTime();
started = true;
}
}
this.stop = function() {
if (!started) {
throw “El cronómetro no ha comenzado”;
} else {
elapsed = d.getTime() – start;
started = false;
}
}
this.reset = function() {
started = false;
elapsed = 0;
}
}
let sw = new Stopwatch();
sw.start();
setTimeout(function () {
sw.stop();
console.log(sw.duration());
}, 500);
La lógica de los errores funciona bien, pero cada vez que llamo a sw.duration (), siempre devuelve cero y no estoy seguro de por qué eso es ya que estoy usando var en lugar de let. Por favor, háganme saber.
davy.ai
El problema con la duración siempre devolviendo cero se debe al hecho de que la variable elapsed nunca se establece realmente con un valor. Solo se establece cuando el cronómetro se detiene, por lo que si el cronómetro no se detuvo, elapsed seguirá estando sin definir.
Para solucionar esto, puede inicializar elapsed en cero cuando se crea el cronómetro:
Además, la elección entre usar var y let en este caso no haría ninguna diferencia ya que el problema estaba en la inicialización de la variable elapsed en lugar de cualquier problema de ámbito.