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

280
Vistas
¿Por qué Javascript cambia las entradas de una función después de ejecutarla?

Tengo una aplicación (juego) ejecutándose en javascript. Solía codificar juegos Flash (y también C ++ y Java hace años), así que estoy usando el lienzo para ejecutar el juego en javascript. Ha habido muchas cosas "divertidas" que he aprendido sobre cómo javascript funciona "de manera diferente", pero me he encontrado con un problema que no puedo entender y no puedo encontrar ninguna razón en línea.

Javascript ejecutará una función y luego (al parecer) decidirá arbitrariamente cambiar la entrada a 0. Digo arbitrariamente porque estas funciones funcionaron perfectamente durante el último mes, y solo hoy decidieron actuar de manera extraña. La función se activa correctamente, luego cambia instantáneamente la entrada que la activó a 0 y ejecuta todas las líneas de código en la función. No entiendo cómo sucede esto y nada de lo que cambio en mi código afecta el resultado. La única solución que encontré es eliminar la función y escribir una nueva usando un estilo diferente... Este enfoque no puede ser la mejor manera. ¿Algunas ideas? Además, esta es mi primera pregunta, así que no sé el formato correcto para preguntar. Mi código tiene miles de líneas y la función a la que se llama está aislada, por lo que no debería importar.

frameEarring, policeAmount, stoleJewelry son variables públicas si eso importa. la función se activa porque earringFrame > 0, pero... howCanThisLogicallyEqualZero = 0, getValueOfItem(howCanThisLogicallyEqualZero) = 0, policeAmount += 0, setDanger(50) = 50.

este es el codigo

 if (frameEarring > 0) { let howCanThisLogicallyEqualZero = frameEarring; getValueOfItem(howCanThisLogicallyEqualZero); policeAmount += howCanThisLogicallyEqualZero * 10; frameEarring = 0, setDanger(50); stoleJewelry = true; //adds message to phone }

y aquí hay una imagen del juego ejecutándose en Chrome96 y mostrándolo

código real ejecutándose en la consola, Chrome 96

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Eso debería ser imposible. El depurador de Chrome puede confundirse aquí. A veces, las herramientas de desarrollo pueden hacer cosas extrañas, especialmente cuando se trata de transpilación y mapas de origen.

Agregue algo de registro como console.log('frameEarring before check', frameEarring) antes de la verificación condicional, y un console.log('frameEarring is greater than zero', frameEarring) dentro de la rama condicional. Apuesto a que verás los valores que esperas entonces.

Sin un ejemplo reproducible o una comprensión de su proceso de compilación, no puedo decirle por qué su depurador está haciendo exactamente eso.


Por último, evitaría el operador de coma en:

 frameEarring = 0, setDanger(50);

si yo fuera tú. Probablemente quisiste tener un punto y coma allí de todos modos, lo que tendría más sentido.

about 4 years ago · Juan Pablo Isaza 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