# 词法作用域
作用域
作用域是指程序源代码中,定义变量的区域。 作用域规定的如何查找变量,也就是确定当前执行代码对变量的访问权限。 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
← 内存管理 全面认识Object →