1、词法作用域,函数的作用域在函数定义的时候就决定了(取决于函数定义的位置)
2、动态作用域,函数的作用域在函数调用的时候就决定了(取决于函数的调用)
3、看个例子就可以清楚得到明白两者的区别
<script>
var value=1;
function foo(){
console.log(value);
}
function bar(){
var value=2;
foo();
}
bar();//1
</script>
4、
- 如果js采用的是词法作用域:bar()函数调用foo()函数, foo内部没有value,就根据作用域链向上找,找到全局定义的value等于1.
- 如果js采用的是动态作用域:bar()函数调用foo()函数, foo内部没有value,就在调用函数bar的内部查找value变量,这时就找到局部定义的value等于2
很显然,最后输出结果是1,因此js采用的是词法作用域