LexicalEnvironment

In JavaScript, all local variables and functions are properties of the special internal object, called LexicalEnvironment.

LexicalEnvironment保存了作用域的信息 包括此作用域下的参数、变量以及嵌套(链式)的函数作用域信息。
访问本地没有的变量会发生什么

var a = 5

function f() {
  alert(a)
}

一个函数创造时(声明function时),它是在一个对象里面创造的,有一个当前的LexicalEnvironment对象,上面例子中 这个LexicalEnvironment对象是window

一个函数创造时还有一个隐藏的属性[[Scope]],指向当前的LexicalEnvironment对象

函数执行时,创建一个本地的LexicalEnvironment 对象,函数的[[Scope]]属性也指向它

一个变量没有在本地LexicalEnvironment找到,就会向外层找