Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

211
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!