作用域和作用域链

445 阅读1分钟

作用域

  • 作用域是指程序源代码中定义变量的区域。

  • 作用域规定了如何查找变量,也就是确定当前执行代码对变量的访问权限。

  • JavaScript 采用词法作用域(lexical scoping),也就是静态作用域。

栗子

var scope = "global scope";
function checkscope(){
    var scope = "local scope";
    function f(){
        return scope;
    }
    return f();
}
checkscope();

最后输出结果是"local scope",因为f()内读取的scope为函数checkscope()内部声明的变量scope,这个scope的作用域是checkscope()函数内部。

作用域链

查找变量的时候,会先从当前上下文的变量对象中查找,如果没有找到,就会从父级(词法层面上的父级)执行上下文的变量对象中查找,一直找到全局上下文的变量对象,也就是全局对象。这样由多个执行上下文的变量对象构成的链表就叫做作用域链。