理解javascript中的堆栈和框架

时间:2014-09-20 14:55:13

标签: javascript functional-programming

我是js的新手,我很难理解后台发生的事情。

所以,如果我有一个递归的js函数,那么所有的递归调用都会在堆栈上创建堆栈帧吗?然后我们回来后会弹出来?堆是否涉及此过程?

接下来关闭的想法。有了这个,我很困惑,第一个函数放在堆上的东西去了什么?

非常感谢任何解释。

1 个答案:

答案 0 :(得分:2)

  

所以,如果我有一个递归的js函数,那么所有的递归调用都会在堆栈上创建一个堆栈帧吗?

是。每个函数调用都会创建一个新的堆栈帧。

  

然后在我们返回后弹出?

是。目前在普通引擎中没有实现尾部调用消除,并且规范并不需要它。

  

堆是否涉及此过程?

可能。或者可能不是。规范根本不区分堆栈和堆,并且无论如何都无法通过语言来控制它。

  

我对事情的进展感到非常困惑。第一个函数是否放在堆上?

可能。如上所述,这是引擎的选择;但是你可以期待它做出明智的决定。

函数是JavaScript中的第一类对象,我希望它们被放入堆中(请注意,在递归调用中,通常只有一个函数,它们不会得到重复)。堆栈中堆栈帧中的变量只包含原始值和指向对象的指针。

相关问题