执行环境及作用域
执行环境 execution context
- 每个执行环境都有一个变量对象 variable object,保存了该环境中定义的所有变量和函数
- 活动对象 activation object:当进入一个执行环境时,被激活的变量对象即为活动对象
- 全局执行环境:最外围的执行环境;例如浏览器中,全局执行环境为 window 对象
- 执行环境的所有代码执行完毕后,该环境会被销毁,该环境的变量对象也会销毁
- 每个函数都有自己的执行环境
作用域
- 代码在一个执行环境中执行时,会创建执行环境变量对象的一个作用域链
- 作用域链最后端是全局执行环境的变量对象
- 作用域链最前端是当前执行环境的变量对象
- 函数执行环境的作用域链最前端是 arguments 对象
ES6+ 开始有块级作用域,但需要注意浏览器中的兼容实现导致 var 变量不限于块级作用域,因此最好使用 let、const。
闭包
闭包函数是指能够访问另一个函数作用域变量的函数(闭包函数作用域链上)。最常见的是在函数内部定义函数。
function closureCreator() {var index = 1;return function() {index++;}}var fn = closureCreator(); // fn -> 闭包fn(); // index: 2
