не получается организовать рекурсию при замыкании

function createRandom() {
    let arr = []
    return function() {
        console.log('func entry')
        let newNum = Math.floor(Math.random() * (10 - 1 + 1) + 1)
        console.log(`this is newNum = ${newNum}`)
        if(arr.indexOf(newNum) == -1) {
            arr.push(newNum)
            console.log('new num has pushed')
            console.log(arr)
        } else {
            console.log('else entry')
            createRandom()
        }
    }
}

let body = document.querySelector('body')
let btn = document.createElement('button')
btn.innerHTML = 'click on me'
body.appendChild(btn)
btn.addEventListener('click', createRandom())

после нажатия на кнопку, при выполнении блока else{}, выполнение createRandom() игнорируется, почемуууу


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

Автор решения: Pavel Grishaev

Попробуйте именовать функцию и вызывать её внутри, а не внешнюю создающую:

function createRandom() {
    let arr = []
    return function recursiveStep() {
        console.log('func entry')
        let newNum = Math.floor(Math.random() * (10 - 1 + 1) + 1)
        console.log(`this is newNum = ${newNum}`)
        if(arr.indexOf(newNum) == -1) {
            arr.push(newNum)
            console.log('new num has pushed')
            console.log(arr)
        } else {
            console.log('else entry')
            recursiveStep()
        }
    }
}
→ Ссылка