闭包存储全局变量吗?



根据MDN,

"闭包是函数和声明该函数的词法环境的组合。此环境由创建闭包时范围内的任何局部变量组成。">

"局部变量"是什么意思?闭包是否也存储创建函数时可用的全局变量?或者它们只存储来自封闭当前函数的任何函数的局部变量?

如果闭包出于某种原因存储全局变量,那么每个闭包不是要存储很多信息吗(就像在一个有很多变量的大文件中一样)?

是。它在内存的某个地方。

function outer() {
let apple = "fruit";
function inner() {
console.log(apple);
}
return inner;
}
let accessInner = outer();
accessInner();

此处闭包的值为"fruit"。
调用outer()之后,inner()的返回值作为函数对象分配给accessInner变量。
表示accessInner。[[environment]]存储值"fruit"从outer()传递。
由于accessInner变量在全局EC中,所以它作为严格的全局变量存储。

最新更新