Código fatorial funciona, mas por que

Estou resolvendo um problema fatorial em que a função pega um número e retorna o fatorial desse número.

O problema que estou enfrentando é que o código funciona, mas não sei por quê. Não há loops para chamá-lo de volta depois que o código for executado e nem tenho certeza de onde o valor atual está sendo armazenado. executando com um valor de n-1, portanto, um número a menos que o tempo anterior, no entanto, ainda não vejo como o valor está sendo armazenado para multiplicar cada número pelo valor atual. Mesmo se eu registrar o valor atual de n após cada execução, tudo o que recebo são os números 10 e um. Eu acho que o valor atual mudaria para o valor multiplicado.

Novamente, esse código funciona perfeitamente, só preciso entender o porquê.

function factorial(n) {
    if (n === 0) {
        return 1;
    }
    console.log(n);
    return n * factorial(n - 1);
}

factorial(10);

questionAnswers(1)

yourAnswerToTheQuestion