定义
词法作用域: 是关于引擎如何寻找变量以及会在何处找到变量的规则。定义过程发生在代码的书写阶段。大多数编程语言在使用。
动态作用域:作用域是在运行时才被动态确定的形式,而不是写代码时进行静态确定的形式。仍有一些编程语言在使用(比如Bash 脚本、Perl 中的一些模式等)
代码如下:
// 词法作用域
function foo() {
console.log(a); // 2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
// 动态作用域
function foo() {
console.log(a); // 输出3而不是2
}
function bar() {
var a = 3;
foo();
}
var a = 2;
bar();
解析
词法作用域让foo()
中的a通过RHS引用了全局作用域中的a,因此会输出2。
动态作用域只关心函数在何处调用(类似this),是在运行时才能确定的。是基于栈的,而不是代码中的作用域嵌套。