El código factorial funciona pero por qué

Estoy resolviendo un problema factorial donde la función toma un número y devuelve el factorial de ese número.

El problema con el que me encuentro es que el código funciona pero no sé por qué. No hay bucles para devolver la llamada después de ejecutar el código y ni siquiera estoy seguro de dónde se almacena el valor actual. Si estoy en lo cierto, supongo que la función se vuelve a ejecutar cada vez que toca el retorno y es ejecutando con un valor de n-1, por lo que un número menos que la vez anterior, sin embargo, todavía no veo cómo se almacena el valor en múltiples números por el valor actual. Incluso si registro el valor actual de n después de cada ejecución, todo lo que obtengo son los números 10 a uno. Creo que el valor actual cambiaría al valor multiplicado.

Nuevamente, este código funciona perfectamente. Solo necesito entender por qué.

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

factorial(10);

Respuestas a la pregunta(1)

Su respuesta a la pregunta