首页 > 解决方案 > JavaScript 中的闭包值存储在哪里?

问题描述

带有闭包的代码示例:

const Component = () => {
    let counter = 0;
    
    const logger = () => {
        console.log(counter);
    }

    setTimeout(() => counter = counter + 10, 1000);

    return logger;
}

const myLogger = Component();

myLogger(); // output after ~1s: 10

创建闭包时,闭包值存储在内存中的什么位置?

在我的示例中,Component返回后,它的执行上下文被删除,它的variable environment. 但在其属性中myLogger仍然持有引用。counter[[Scopes]]

这个参考的价值在哪里?它是在全局执行上下文中还是在哪里?

标签: javascriptscopereferenceclosures

解决方案


每次创建函数时都会创建闭包,在 JavaScript 中是在函数创建时创建的。闭包值存储在定义它的环境中。该环境由创建闭包时范围内的任何局部变量组成。

有关更多信息,请检查JavaScript 变量范围和闭包

我希望这会对你有所帮助。


推荐阅读