我对js非常陌生,很难理解在后台发生了什么。
因此,如果我有一个递归js函数,是否所有递归调用都在堆栈上创建堆栈框架?然后等我们回来就被干掉了?堆是否涉及此过程?
接下来是闭包的想法。对于这一点,我对事情的发展感到非常困惑,第一个函数会被放到堆里吗?
任何解释都将不胜感激。
发布于 2014-09-20 15:32:27
因此,如果我有一个递归js函数,是否所有递归调用都在堆栈上创建堆栈框架?
是。每个函数调用都会创建一个新的堆栈框架。
然后等我们回来就被干掉了?
是。目前还没有在通用引擎中实现尾叫消除,而且规范还没有要求它。
堆是否涉及此过程?
有可能。也可能不是。规范根本没有区分堆栈和堆,而且您也无法通过语言来控制它。
我对事情的发展感到非常困惑。第一个函数是否被放入堆中?
有可能。如前所述,这是引擎的选择,但你可以期待它做出明智的决定。
函数是JavaScript中的第一类对象,我希望将它们放入堆中(注意,在递归调用中,通常只有一个函数,它们不会被复制)。堆栈上堆栈帧中的变量将只包含指向对象的基本值和指针。
https://stackoverflow.com/questions/25950026
复制相似问题