La razón por la que tienes un bucle infinito es por que estás usando un let dentro del ciclo while. El error que está ocurriendo es debido al escopo de let. Es un poco complicado de explicar el porqué pero trataré de hacer mi mejor esfuerzo :)
Recordemos que no usamos las variables de tipo var para evitar problemas con la coherencia del código, ya que estas tipos de variables tienen un escopo dentro y fuera de su bloque código. Por ejemplo, digamos que creas una función y dentro de la función creas la variable var num. Supongamos que unas lineas antes imprimiste esta variable a pesar de no haberla declarado antes de la función. (Vease ejemplo 1)
//Ejemplo 1
alert(num);
//Ignora lo que haga la función, todavía no sé crearlas
function suma(num,8){
var num =3;
}
Si compilas este código, no te marcará ningún error (suponiendo que la función fuera válida). Sin embargo, no tiene coherencia dado que al momento de imprimir 'num' con la función alert(), te devolverá un valor de 'undefined'. Por lo tanto, puede ser que no tengas los resultados esperados y no encuentres un error aparente.
Para evitar esto, se pueden usar las variables de tipo let. Veamos ahora que pasa si usamos let en vez de var. (Vease ejemplo 2)
//Ejemplo 2
alert(num)
function suma(num,8){
let num =3;
}
Si intentas compilar el código del ejemplo anterior, todo el código te devolverá un error, diciendote que no se puede imprimir la variable de num por que no se ha inicializado ni declarado si quiera.
Aunque se declaró dentro de la función, solo se limita a ese bloque de código específico y no se puede usar fuera de ese bloque.
Establecido lo anterior, es más recomendable usar variables de tipo let en todos tus códigos hasta que te digan lo contrario.
Una vez que declaras una variable con let, no es necesario volver a poner let al asignarle un nuevo valor a esta variable.
En el ejercicio del video, se inicializa la variable con un valor cualquiera, no importa cuál valor se le ponga, mientras sea diferente del valor al que se le está comparando. Esto es para que puede iniciarse el ciclo while.
Dentro del ciclo while no es necesario volver a poner let al asignarle el nuevo valor con el prompt. De lo contrario, es como si estuvieras creando una nueva variable completamente diferente y nueva dentro del ciclo while, cuya operación únicamente afectaría al bloque de código del ciclo while y no a todo el código fuera del while. El código corecto debería quedar así:
let numeroSecreto = 4;
let numeroUsuario = 0;
while(numeroUsuario != numeroSecreto){
numeroUsuario = prompt('Me indicas un número entre 1 y 10 por favor: ');
console.log(numeroUsuario);
if (numeroUsuario == numeroSecreto){
alert(`Acertaste, el número es: ${numeroUsuario}`);
}else {
if (numeroUsuario > numeroSecreto){
alert('El número secreto es menor');
}else{
alert('El número secreto es mayor');
}
}
}
Te recomiendo ir a la documentación del capítulo uno y leer la parte de los Tipos de variables. Ahí manda a una nueva pestaña sobre cómo funcionan estas.
Gracias por leer todo mi comentario, espero que haya sido de ayuda y lamento un poco la redacción. Estoy al pendiente en caso de que esté mal o haya que cualquier otra duda. :)