Javascript解释器如何执行递归函数?

Javascript解释器如何执行递归函数?,javascript,function,recursion,callstack,Javascript,Function,Recursion,Callstack,让我们举个例子 function main (x) { return x } function second() { console.log("hello ") } js编译器知道所有函数声明,所以我可以调用secondinsidemain main(second()) 关于递归函数,我不知道的是如何在函数声明中调用相同的函数 function factorial(n) { if (n ===1) { return 1; } else { r

让我们举个例子

function main (x) {
    return x
}

function second() {
    console.log("hello ")
}


js编译器知道所有函数声明,所以我可以调用
second
inside
main
main(second())
关于递归函数,我不知道的是如何在函数声明中调用相同的函数


function factorial(n) {
 if (n ===1) {
 return 1;
 } else {
 return n * factorial(n-1);
 }
}

我的思考过程是:好的,这是函数声明,这是函数所做的,但是怎样才能

即使声明未完成,我也可以调用相同的函数,因为函数在定义时未运行。它只在稍后调用时运行

函数的代码是执行计算的方法。如果在某个点调用另一个函数,则意味着执行将根据该配方继续,然后当该配方完成时,执行将返回到调用点之后,并从那里继续

不过,是否调用相同的函数并不重要。这只是意味着同样的配方将被遵循。但是,至关重要的是,每个调用都是配方的独立副本,每个调用都在自己的环境中独立运行,如调用堆栈框架等,这使得递归成为可能


请参阅我对它的更多讨论,或者。

Javascript不是经典意义上的解释,它不会逐行执行代码。编译器!==解释这些是不同的东西,它们的工作方式不同,所以在这个调用堆栈上对您的语言要小心一点?有一个很好的形象也你的想法?