Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

212
Vistas
no puedo clearInterval en mi script, pero ¿por qué?

Estoy tratando de desarrollar un juego de turno simple en JS, y necesito hacer que esas interacciones de batalla tengan algo de retraso. Estoy usando setInverval para automatizar todo después de que el jugador presiona '¡Batalla!', pero al verificar si todavía está vivo, mi clearInterval no funciona: el proceso aún se ejecuta en segundo plano o_o

 const player = { hp: 0, state: true } const enemy = { hp: 100, state: true } function checkHp() { if(player.hp === 0 || enemy.hp === 0){ const start = setInterval(function() { console.log('Checando turnos...'), battle() }, 2000) return start } else { clearInterval(start) console.log('Você precisa descansar!') } } function battle() { turn = 0 turn = Math.floor(Math.random () * 2) console.log(turn) } checkHp()
about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Como han señalado otros, el start está fuera del alcance cuando intenta usarlo para borrar su intervalo. Analicemos lo que está haciendo su código:

 function checkHp() { if(player.hp === 0 || enemy.hp === 0){ // start is defined here in the scope of this block const start = setInterval(function() { console.log('Checando turnos...'), battle() }, 2000) // it is returned from the function here return start } else { // start has never been defined inside the else block, so it // has a value of undefined clearInterval(start) console.log('Você precisa descansar!') } }

Puede ser útil leer sobre el alcance de las variables en javascript .

Más adelante en la secuencia de comandos llama a checkHp , pero no guarda el valor de retorno, que es el identificador de intervalo si ingresó el bloque if o undefined si ingresó el bloque else, desde el cual no devuelve un valor.

Ahora, ¿qué hacer con esto? Parece que probablemente esté tratando de configurar un intervalo que se borre solo bajo ciertas condiciones. Puede consultar esta respuesta para obtener algunos consejos al respecto.

about 4 years ago · Santiago Trujillo Denunciar

0

clearInterval no puede funcionar para argumentos undefined . Ponga la variable de start fuera de la condición if para que clearInterval funcione. De

 function checkHp() { if(player.hp === 0 || enemy.hp === 0){ const start = setInterval(function() { console.log('Checando turnos...'), battle() }, 2000) return start } else { clearInterval(start) console.log('Você precisa descansar!') } }

a

 function checkHp() { // this line new added const start; if(player.hp === 0 || enemy.hp === 0){ // this line will edited start = setInterval(function() { console.log('Checando turnos...'), battle() }, 2000) return start } else { clearInterval(start) console.log('Você precisa descansar!') } }

clearInterval siempre funciona ya que setInterval se asigna con variables. Entonces, la variable de start debe asignarse fuera de la condición if primero.

Las variables de Javascript pueden tener un alcance global y también pueden tener un alcance local. El alcance local no se puede tocar en el alcance global, pero la variable de alcance global se puede usar en la escala local. Estos ámbitos se pueden decidir por function , if y otros métodos que tienen corchetes ( {} ). Podemos ver un ejemplo,

 let a = 'apple' function printA() { //will console apple in this local function console.log(a) return } printA();

El ejemplo anterior de apple se puede consolar en la función,

 let a; function asignA() { a = 'banana' return } printA(); //this will console apple still in global scale //will not console banana //because asigning banana was declared in local scope console.log(a)

en este ejemplo, el banana asignado no se puede consolar fuera de la función.

about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda