# 作用域链
# 作用域链
函数在创建的时候有一个内部属性 [[scope]] ,里面保存所有父变量对象到其中, [[scope]] 就是所有父变量对象的层级链,但是并不是完整的作用域链子。
在每个执行上下文的变量环境中, 会将活动对象添加到作用链的前端。
Scope = [当前函数作用域].concat([[scope]])
当一段代码使用了一个变量时,JavaScript 引擎首先会在“当前的执行上下文”中查找该变量。
如果在当前的变量环境中没有查找到,那么 JavaScript 引擎会继续在 outer 所指向的执行上下文中查找。
如果在 bar 函数或者 foo 函数中使用了外部变量,JavaScript 引擎会去全局执行上下文中查找。我们把这个查找的链条就称为作用域链。
foo 函数调用的 bar 函数,那为什么 bar 函数的外部引用是全局执行上下文,而不是 foo 函数的执行上下文?
这是因为词法作用域(看词法作用域章节)。