作用域和作用域链
作用域
作用域是程序源代码定义变量的区域。JavaScript 采用的是词法作用域也成为静态作用域,函数的作用域在定义的时候就已经决定了。与之相对的是动态作用域,函数的作用域是在调用的时候才决定的。
作用域链
当代码在执行环境中执行,会创建变量对象的一个作用域链,作用域链的用途是保证对执行环境有权访问的变量和函数的有序访问。当查找变量的时候,会从当前执行环境中的变量对象中查找,如果没有找到,就会从父级执行环境的变量对象中查找(词法层面),一直找到全局执行环境的变量对象,也就是全局对象。这样的执行上下文的变量对象构成的链表就成为作用域链。