词法环境
Lexical Environment:运行的函数的环境,包括 代码块、整个 script 所关联内部对象。
Lexical Environment 对象由两部分组成:
- Environment Record / 环境记录 —— 是个对象,包括所有局部变量,也包括 this。
- 外部词法环境 的引用,与外部代码相关联。
局部“变量”只是 Environment Record 的一个属性
所有的函数在“诞生”时都会记住创建它们的词法环境。
所有函数都有名为 [[Environment]] 的隐藏属性,该属性保存了对创建该函数的词法环境的引用。
调用函数时,会 自动创建 一个 新的 Lexical Environment,以存储这个调用的 局部变量 和 参数。
当代码要访问一个变量时,会搜索 内部词法环境,然后搜索 外部环境,然后搜索 更外部的环境,以此内推。

gc
函数 调用完成 后,词法环境(和其中的所有变量)会 从内存中删除。
但是闭包可以让他继续苟。
js
function f() {
let value = 123;
return () => ++value;
}
let g = f(); // 活着
g = null; // 死透了V8 的优化
对于未使用的变量, V8(Chrome,Edge,Opera) 会试图优化 Lexical Environment, 即把它删点。
大多数时候,不会有问题,但是你应该知道这个问题。