【问题标题】:How is it possible for the Javascript interpreter to execute recursive functions?Javascript 解释器如何执行递归函数?
【发布时间】:2021-07-15 10:33:45
【问题描述】:

让我们举个例子

function main (x) {
    return x
}

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


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


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

我的思考过程是:好的,这是函数声明,这是函数的作用,但如何
即使声明没有完成,我可以调用相同的函数吗

【问题讨论】:

标签: javascript function recursion callstack


【解决方案1】:

因为函数在定义时没有运行。它只在稍后被调用时运行。

函数的代码是执行计算的秘诀。如果在某个时候它调用了另一个函数,这意味着执行会根据 that 配方继续,然后当它完成时,执行将返回到调用点之后 ,并且从那里恢复。

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

另请参阅我的these answers 更多地谈论它,或that one

【讨论】:

  • 你的想法?
猜你喜欢
  • 1970-01-01
  • 2021-11-04
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
  • 2016-02-24
  • 2020-06-25
相关资源
最近更新 更多