我是js的新手,我很难理解后台发生的事情。
所以,如果我有一个递归的js函数,那么所有的递归调用都会在堆栈上创建堆栈帧吗?然后我们回来后会弹出来?堆是否涉及此过程?
接下来关闭的想法。有了这个,我很困惑,第一个函数放在堆上的东西去了什么?
非常感谢任何解释。
答案 0 :(得分:2)
所以,如果我有一个递归的js函数,那么所有的递归调用都会在堆栈上创建一个堆栈帧吗?
是。每个函数调用都会创建一个新的堆栈帧。
然后在我们返回后弹出?
是。目前在普通引擎中没有实现尾部调用消除,并且规范并不需要它。
堆是否涉及此过程?
可能。或者可能不是。规范根本不区分堆栈和堆,并且无论如何都无法通过语言来控制它。
我对事情的进展感到非常困惑。第一个函数是否放在堆上?
可能。如上所述,这是引擎的选择;但是你可以期待它做出明智的决定。
函数是JavaScript中的第一类对象,我希望它们被放入堆中(请注意,在递归调用中,通常只有一个函数,它们不会得到重复)。堆栈中堆栈帧中的变量只包含原始值和指向对象的指针。