词法作用域是闭包成立的前提和核心机制,它在函数定义时就固定变量可见范围,使内层函数能持续访问外层函数的变量,即使外层执行上下文已销毁。

词法作用域是闭包成立的前提和核心机制。它决定了函数“记住什么”以及“能访问什么”——不是运行时动态查找,而是在代码写完、函数定义那一刻就固定下来的变量可见范围。
词法作用域让函数绑定定义时的环境
函数内部能访问哪些变量,不看它在哪被调用,而看它在哪被写出来。比如在outer里定义的inner,哪怕inner后来被返回到全局执行,它依然能读取outer里的name,因为定义位置锁定了作用域链。
没有词法作用域,就没有真正的闭包
如果作用域是动态的(比如按调用栈实时决定),那函数离开原函数后就找不到外部变量了。而词法作用域保证了: • 外部函数执行结束、执行上下文销毁后,变量仍被保留在内存中 • 内层函数携带一份对这些变量的引用,而不是拷贝值 • 同一个外层函数多次调用,每次产生的闭包都各自持有独立的变量副本
它直接支撑闭包的典型行为
比如计数器、私有状态、配置预置等场景,背后都是词法作用域在起作用:
• const createCounter = () => { let count = 0; return () => count++; } —— count被return出的函数持续持有
• 模块模式中return { get, set },get和set共享同一份词法环境中的私有变量
• 事件回调里保存的id或config,不会因外层函数退出而丢失
不复杂但容易忽略

















