什么时候在 Javascript 中确定闭包?

When do closures determined in Javascript?

提问人:江定玺 提问时间:4/4/2023 最后编辑:jcalz江定玺 更新时间:4/4/2023 访问量:60

问:

  1. 我对函数获得闭包的时间有点困惑。这是否发生在编译时或运行时。最好用执行上下文来解释这个概念。

  2. 执行所有与内部属性 [[scopes]] 一起诞生的函数。如果是这样,[[scopes]] 和“对外部词汇环境的引用”之间有什么关系。谁决定范围链?

以下代码可以作为示例:

function a(){
    let t = 0;
    return function b() {
        t++
        console.log(t);
    }
}
let c = a();
c();

我正在尝试完全理解执行上下文、执行堆栈、词法环境、闭包、[[范围]] 之间的关系。

JavaScript 函数 闭包

评论

0赞 VLAZ 4/4/2023
相关:在 JavaScript 中创建闭包时。免责声明,我在那里有答案。
1赞 Teemu 4/4/2023
值得注意的是,[[Scopes]] 不是内部 JS 属性,它只是 Chromium 调试器中的一个属性。
1赞 jcalz 4/4/2023
我从这里取消标记“TypeScript”,因为这个问题没有询问甚至没有提到任何特定于 TypeScript 的内容。
1赞 Bergi 4/4/2023
@Teemu EcmaScript 标准在函数上具有 [[OuterEnv]] 内部属性,其大小相同
1赞 Bergi 4/4/2023
非常相关:JavaScript 中的每个函数都是闭包是真的吗?

答: 暂无答案