函数内声明局部变量应遵循就近声明、最小作用域、明确意图原则,优先用const(值不重赋)和let(需重赋),禁用var,避免提升与作用域问题。

在函数内部合理声明局部变量,核心是遵循“就近声明、最小作用域、明确意图”三个原则。避免变量提升带来的意外行为,优先使用 let 和 const 替代 var,并在真正需要时才声明,而不是堆在函数顶部。
用 const 优先,let 次之,禁用 var
var 存在变量提升和函数作用域问题,容易导致未预期的访问或覆盖。现代 JavaScript 应统一使用块级作用域的 const 和 let:
- 值不重新赋值 → 用
const(包括对象、数组,只要引用不变) - 后续需重新赋值 → 用
let - 避免写
var x;,即使在函数开头也不推荐
在首次使用前就近声明,而非集中到函数顶部
把变量声明放在最靠近其第一次被读取或赋值的位置,能提升可读性并减少未初始化误用:
- ❌ 不推荐:
function process(data) {
let result, item, i;
for (i = 0; i item = data[i];
result = transform(item);
console.log(result);
}
} - ✅ 推荐:
function process(data) {
for (let i = 0; i const item = data[i];
const result = transform(item);
console.log(result);
}
}
利用块级作用域缩小变量生命周期
用大括号 {} 显式创建块作用域,让临时变量只存在于真正需要它的逻辑段中:
- 比如条件分支中只在某一分支用到的配置项,就不要提出来放到整个函数作用域
- 异步回调里用到的中间值,尽量在回调内部声明,避免闭包意外捕获
- 示例:
if (user.isAdmin) {
const adminConfig = loadAdminSettings();
applyPermissions(user, adminConfig);
}
// 这里访问不到 adminConfig,符合预期
避免隐式全局和拼写错误:始终显式声明
忘记写 let/const 会导致意外创建全局变量(非严格模式下),严格模式会报错但最好从源头杜绝:
- 开启
"use strict"是基础防线 - 借助 ESLint 规则如
no-undef、no-unused-vars提前发现漏声明或未使用变量 - 对解构赋值、循环变量等同样要加声明:
const { name, id } = user;,而非let name, id; ({ name, id } = user);
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











