最直接有效的方式是弃用var,统一使用const和let:默认用const,需重赋值才用let;const必须初始化且绑定不可变,对象/数组内部仍可修改;循环计数器等明确变化场景用let;变量就近声明,配合eslint no-var等规则自动拦截。

最直接有效的方式是弃用 var,统一使用 const 和 let,并配合就近声明与工具约束。
默认用 const,需要重赋值才用 let
const 声明的变量必须初始化,且绑定不可重新赋值,天然规避了“声明前访问”和意外覆盖的问题。即使声明在后,提前访问也会立即报 ReferenceError,而不是返回 undefined 静默出错。
- 对象或数组用
const声明后,仍可修改其内部属性或元素,只是不能把变量指向新地址 - 循环计数器、临时中间值等明确会变化的场景,改用
let - 所有函数参数、回调内变量、条件分支中的新变量,都优先考虑
const
变量声明尽量靠近首次使用位置
不把变量堆在函数顶部,而是放在真正需要它的地方。这样既减少跨行依赖,也降低因提升导致的逻辑错位风险。
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 比如在
if块内用到的配置项,就在if开头声明,而不是塞到函数最上面 - 异步回调里的数据处理变量,就在回调函数内部第一行声明
- 避免“先声明、后判断、再赋值”的三段式写法,改用带条件的初始化:
const mode = isProd ? 'live' : 'test';
启用 ESLint 并开启严格提升检查
靠人盯容易漏,用工具拦截更可靠。ESLint 的 no-use-before-define 和 no-var 规则能自动发现 var 使用和提前访问问题。
- 在项目配置中启用
eslint-plugin-unicorn,它提供prefer-const等实用建议 - 搭配 TypeScript 更进一步,类型系统会在编译期捕获未声明即使用的错误
- CI 流程中加入 lint 检查,禁止含
var的代码合入主干
警惕函数表达式与函数声明混用
函数声明会整体提升,函数表达式只提升变量名。两者行为差异大,混用容易误判执行顺序。
- 统一用箭头函数或
const fn = function() {}形式,避免function fn() {}声明 - 如果必须用命名函数,确保调用一定在声明之后,不依赖提升特性
- 模块顶层不要写条件函数声明(如
if (x) function foo() {}),不同引擎处理不一致
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










