Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Ya estoy inscrito ¿Todavía no tienes acceso? Nuestros Planes
Solucionado (ver solución)
Solucionado
(ver solución)
1
respuesta

[DUDA] Interrumpiendo una Repetición

<meta charset="UTF-8">
Juego de adivinanza
<script>
    var numberPensado=Math.round(Math.random()*10);
    var intentos = 3;
    var contador =1;

    while(contador<=intentos){
        var numberLanzado=parseInt(prompt("Ingrese un numero del 0-10"));
        if (numberPensado==numberLanzado){
            alert("Usted acertó en el intento "+contador+" el numero pensado era: "+numberPensado);
            break;
        }

        else {
            alert("Usted no acertó");
            contador++;

        }


    }
    if (numberPensado==numberLanzado){
        imprimir("Usted acertó en el intento "+contador+" el numero pensado era: "+numberPensado);
    }

    else {
        imprimir("Usted no acertó, el numero pensado era: "+numberPensado);

    }

    imprimir("FIN");
</script>

Mi duda es en el segundo IF, como sabe en el momento de comparar sobre el contenido de la variable numeroLanzado si esa variable estaba dentro del WHILE, no se suponia que las variable dentro de un while solo se puede utilizar dentro del mismo while?

1 respuesta
solución!

Luis. Ese es, justamente, el problema de usar var, y uno de los motivos por el cual esta en desuso.

La palabra reservada "var" crea las variables antes de la compilacion, lo cual se conoce como hoisting, eso implica que podes llamar una var antes de ser definida y ademas, tambien por fuera de su scope. Es decir, son globales.

Para evitar ese comportamiento, podes usar let, que estan reservadas al "closure" en el que fueron creadas.

Podes leer mas aca: https://www.freecodecamp.org/espanol/news/que-es-hoisting-alzar-en-javascript/

<meta charset="UTF-8">
Juego de adivinanza
<script>
    var numberPensado=Math.round(Math.random()*10);
    var intentos = 3;
    var contador =1;

    while(contador<=intentos){
#!!!!!  usando __let__ en vez de __var__
        let numberLanzado=parseInt(prompt("Ingrese un numero del 0-10"));
#!!!!!
        if (numberPensado==numberLanzado){
            alert("Usted acertó en el intento "+contador+" el numero pensado era: "+numberPensado);
            break;
        }

        else {
            alert("Usted no acertó");
            contador++;

        }


    }
    if (numberPensado==numberLanzado){

    ###!!!  Este condicional  genera un ReferenceError, porque numberLanzado ya no esta definido en este scope 

        imprimir("Usted acertó en el intento "+contador+" el numero pensado era: "+numberPensado);
    }

    else {
        imprimir("Usted no acertó, el numero pensado era: "+numberPensado);

    }

    imprimir("FIN");
</script>