最直接有效的方式是禁用var,优先使用const(需重赋值时用let),就近声明变量,并通过eslint规则no-var和no-use-before-define强制约束。

最直接有效的方式是不用 var,改用 const 和 let,并配合就近声明和工具检查。
默认用 const,需要重赋值才用 let
const 声明的变量必须立即初始化,且不能重新赋值,天然规避“声明前访问”问题。即使写在代码后半段,只要没到声明行,访问就立刻报错(ReferenceError),错误暴露得早、定位准。
只有确实需要后续修改时,才换用 let,它虽有暂时性死区(TDZ),但至少不会静默返回 undefined。
声明尽量靠近首次使用位置
把变量声明放在真正要用它的地方,而不是堆在函数开头。这样既减少跨行依赖,也降低因提升导致逻辑错位的风险。
例如:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 不要在函数顶部一堆
let a, b, c;,然后几十行后才第一次用a - 推荐在
if块内声明所需变量,在for循环初始化语句中声明计数器
禁用 var,用 ESLint 主动拦截
var 的提升行为容易引发隐蔽 bug,工程中应彻底弃用。
启用 ESLint 规则:
-
no-var:禁止使用var -
no-use-before-define:防止在声明前使用变量或函数 - 搭配
env: { es2021: true }确保解析器按现代标准工作
CI 流程中加入 ESLint 检查,让这类问题在提交前就被卡住。
注意函数声明与表达式的区别
函数声明(function foo() {})会整体提升,容易让人误以为“写在哪都行”;而函数表达式(const foo = () => {})受 TDZ 约束,必须先声明再调用。
统一用函数表达式 + const,行为更一致、更可控。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










