词法作用域和动态作用域

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

原文地址:https://www.cnblogs.com/mengff/p/6909671.html