Замыкание из рекурсивной функции

Есть рекурсивная функция-игра "угадай число". Нужно разделить её на два файла-в одном из них будет основной код игры, а в другом-функция, которая её запускает, соответственно, нужно сделать с использованием функции замыкания. Как исправить мой вариант, чтобы функция работала корректно?

// Рекурсивная функция-игра "Угадай число"

let randomNum = parseInt(Math.random() * 100);
console.log(randomNum);

function guessNumber(userNum) {
  userNum = prompt('Введите число');
  
  if (isNaN(userNum)) {
    alert('Можно вводить только числа');
    guessNumber(userNum);
  }

  if (userNum === null) {
    return;
  }

  if (userNum == randomNum) {
    alert('Верно, Вы угадали загаданное число!');
    return;

  } else if (userNum < randomNum) {
    alert('Ваше число меньше');
    guessNumber(userNum);
  
  } else if (userNum > randomNum) {
    alert('Ваше число больше');
    guessNumber(userNum);
  }
}

guessNumber();

мой вариант замыкания, основной код игры:

let guessNumber = (function () {
    let randomNum = parseInt(Math.random() * 1000);
    let attempts = 10;

    let userNum = prompt('Введите число. У Вас 10 попыток');

    if (isNaN(userNum)) {
        alert('Можно вводить только числа');
    }

    if (attempts === 0) {
        alert('Попытки закончились');
    }

    if (userNum === null) {

    }

    attempts--;

    if (userNum == randomNum) {
        alert('Верно, Вы угадали загаданное число!');
        

    } else if (userNum < randomNum) {
        alert('Ваше число меньше! Осталось попыток: ' + attempts);
        userNum = +prompt('Введите число');
        

    } else if (userNum > randomNum) {
        alert('Ваше число больше! Осталось попыток: ' + attempts);
        userNum = +prompt('Введите число');
        
    }

})();

Второй файл, с функцией, которая будет запускать игру:

guessNumber();

Ответы (1 шт):

Автор решения: Aziz Umarov

Твой вариант это не функция а вызов. Если хочешь замыкание то это делается немного по другому.

let guessfunc = () => { function Res () {
    let randomNum = parseInt(Math.random() * 1000);
    let attempts = 10;

    let userNum = prompt('Введите число. У Вас 10 попыток');

    if (isNaN(userNum)) {
        alert('Можно вводить только числа');
    }

    if (attempts === 0) {
        alert('Попытки закончились');
    }

    if (userNum === null) {

    }

    attempts--;

    if (userNum == randomNum) {
        alert('Верно, Вы угадали загаданное число!');
        

    } else if (userNum < randomNum) {
        alert('Ваше число меньше! Осталось попыток: ' + attempts);
        userNum = +prompt('Введите число');
        

    } else if (userNum > randomNum) {
        alert('Ваше число больше! Осталось попыток: ' + attempts);
        userNum = +prompt('Введите число');           
    }
 }
 return Res;
}

let guessNumber = guessfunc();

guessNumber();
→ Ссылка