Skip to content

词法作用域(Lexical Scope)

词法作用域指的是:变量的可见范围由“代码写在哪里”决定,而不是“运行时在哪执行”。

一个简单例子

javascript
function outer() {
    let x = 1;
    function inner() {
        return x + 1;
    }
    return inner;
}

let f = outer();
f(); // 2

inner 捕获了 outer 里的 x,这就是闭包的基础。

与动态作用域的区别

在动态作用域中,变量的查找取决于“调用链”。但 JavaScript 使用的是词法作用域,所以按“定义时的位置”查找。

常见影响

  • 函数可以访问外层变量(闭包)。
  • 变量遮蔽(inner 里定义的变量会遮住外层同名变量)。
  • var 没有块级作用域,会导致循环陷阱。

进一步阅读

理解词法作用域能帮助你理解闭包、模块、以及一些“看起来很奇怪的变量值”。

CC-BY 4.0 Licensed