You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

闭包对执行上下文的保留层级最多可达多少层?

闭包嵌套场景下的上下文保留问题

结论

  • 内层函数被返回时不会无差别保留所有嵌套祖先的完整执行上下文,仅会保留自身实际引用到的、上级作用域内的变量关联的上下文片段,未被引用的上级作用域变量会被JS引擎的垃圾回收机制正常回收,不会占用额外内存。

示例说明

你给出的多层嵌套函数代码如下:

const a = function() {
    const aa = 'aa';
    return function() {
        const bb = 'bb';
        return function() {
            return aa;
        }
    }
}

按照a()()()的方式调用后返回aa,本质是最内层函数明确引用了第一层函数作用域中的aa变量,因此该变量对应的上下文片段会被持续保留,直到最内层函数本身被销毁。
在这个示例中,最内层函数没有引用第二层函数作用域内的bb变量,因此第二层函数执行完成后,bb会被垃圾回收,不会被保留在最内层函数的上下文链中。

如果调整最内层函数的逻辑,同时引用aa和bb:

return function() {
    return aa + bb;
}

那么两个变量对应的上级上下文片段都会被保留,不会被回收。

内容的提问来源于stack exchange,提问作者Daud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:18:02