几个概念
在开始之前,先了解几个概念。
1.1. 作用域
- 作用域是指当前正在执行的代码能够访问到变量的范围;
- 每个函数都有各自的作用域,存储函数所有的局部变量;
1.2. 变量对象
- 变量对象用于存储函数各自的局部变量;
- 每个函数都有各自的变量对象,并且在函数执行时被创建;
- 上文提到:“每个函数都有各自的作用域,用于存储函数的局部变量”,其实这句话并不严谨。作用域中存储的其实是变量对象的引用,而变量对象才是存储函数局部变量的地方,就像这样:
1.3. 作用域链
- 把多个作用域串起来便形成了作用域链;
- 每个函数在初始化完成之后就拥有了各自的作用域链,但此时的作用域链中并不包含自己的作用域;只有当函数执行时,才会创建自己的作用域,并加入到作用域链的开头;
- 作用域链中不仅存储了函数本身的作用域,还存储了该函数能够访问的其他函数的作用域;
1.4. 执行环境
每个正在执行的函数都有一个执行环境,记录了函数执行过程中的各项信息。
除了全局执行环境外,其余函数的执行环境都会随着函数的执行而被创建,函数