JavaScript采用的是词法作用域
1.词法作用域
即函数定义时,即确定的作用域。js中的作用域链,在函数声明时候,就已经确定了,无论函数在何处调用,其作用域变量的查找都是按照定义是包含关系去查找。
2.动态作用域
变量的作用域与函数的调用地点有关,在不同的函数中调用,变量的查找会沿着调用函数向上查找。
举例:
var a = 2; function foo() {console.log( a ); } function bar() {var a = 3;foo(); } bar();
1.在词法作用域,a的值会先在foo中查找,没有的话到全局中查找,a=2
2.在动态作用域中,a的值先在foo中查找,没有的话到其调用函数中查找,即bar中查找,a = 3