Appearance
词法作用域(Lexical Scope)
词法作用域指的是:变量的可见范围由“代码写在哪里”决定,而不是“运行时在哪执行”。
一个简单例子
javascript
function outer() {
let x = 1;
function inner() {
return x + 1;
}
return inner;
}
let f = outer();
f(); // 2inner 捕获了 outer 里的 x,这就是闭包的基础。
与动态作用域的区别
在动态作用域中,变量的查找取决于“调用链”。但 JavaScript 使用的是词法作用域,所以按“定义时的位置”查找。
常见影响
- 函数可以访问外层变量(闭包)。
- 变量遮蔽(inner 里定义的变量会遮住外层同名变量)。
var没有块级作用域,会导致循环陷阱。
进一步阅读
理解词法作用域能帮助你理解闭包、模块、以及一些“看起来很奇怪的变量值”。