javascript - 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]]
这个参考的价值在哪里?它是在全局执行上下文中还是在哪里?
解决方案
每次创建函数时都会创建闭包,在 JavaScript 中是在函数创建时创建的。闭包值存储在定义它的环境中。该环境由创建闭包时范围内的任何局部变量组成。
有关更多信息,请检查JavaScript 变量范围和闭包
我希望这会对你有所帮助。
推荐阅读
- python - 如何在 Keras 中使用 Conv2D 和 LSTM 层?
- r - r ridge 包未定义符号:regression_wrapper_function
- eslint - eslint 不会更新超过 v4.5.0,“错误:找不到模块 'eslint-config-google'”
- microsoft-graph-api - 是否有从 MS Graph Bookings API 检索服务可用性的内置方法?
- python - 展平嵌套列表
- c# - 如何设置 Microsoft 标识以尊重默认文件名
- asp.net-core - .NET Core 2.1 Swashbuckle - 按区域分组控制器
- c# - 强制认证中间件只接受加密令牌
- python - 对列表进行就地更改的函数
- python - 当一些数据有微秒而一些没有时使用Strptime