对于编程语言来说,存在着两种类型的作用域,分别为静态作用域和动态作用域。作用域类别影响变量的绑定方式。
静态作用域又叫词法作用域。在词法作用域里,取变量的值时,会检查函数定义时的文本环境,捕捉函数定义时对该变量的绑定。大多数现在程序设计语言都是采用静态作用域规则,如C/C++、C#、Python、Java、JavaScript……
采用动态作用域的变量叫做动态变量。只要程序正在执行定义了动态变量的代码段,那么在这段时间内,该变量一直存在;代码段执行结束,该变量便消失。
var b = 'b';
function Test(){
var a = 'a';
this.getA = function(){
return function(){
return a; //对于静态作用域来说,词法解析时已经确定了
}
}
this.getB = function(){
return function(){
return b; //局部作用域没有,会继续向上级作用域查找
}
}
}
var obj = new Test();
console.log(obj.getA()(),obj.getB()()); //a b