# 词法作用域

作用域

作用域是指程序源代码中,定义变量的区域。 作用域规定的如何查找变量,也就是确定当前执行代码对变量的访问权限。 JavaScript采用词法作用域,也就是静态作用域。

  • 静态作用域:函数的作用域在函数定义的时候就决定了
  • 动态作用域:函数的作用域在函数调用的时候才决定

TIP

此处不要与this指向搞混,词法作用域限定的是定义变量的有效范围,不同于this指向问题

示例:


var a = 11;

function foo() {
    console.log(a);
}

function case() {
    var a = 12;
    foo();
}

case();

假设JavaScript采用静态作用域,分析执行过程如下:

执行foo函数,先从foo函数内部查找是否有局部变量a,如果没有,就根据书写的位置,查找上面一层的代码,也就是a等于11,所以结果会打印11。

假设JavaScript采用动态作用域,分析执行过程如下:

执行foo函数,依然是从foo函数内部查找是否有局部变量a。如果没有,就从调用函数的作用域,也就是case函数内部查找变量a,所以结果会打印12.

JavaScript采用的是静态作用域,所以上面例子结果是11