应弃用var,统一使用let和const并按语义选型:函数内优先const,仅重赋值时用let;const适用于参数、计算值、不可变绑定,let用于状态标志和循环计数器。

在函数作用域中规范变量声明,核心是**弃用 var,统一使用 let 和 const,并严格按语义选型**。函数体本身是一个作用域,但现代 JavaScript 要求进一步细化——if、for、{} 等块内部也应有独立作用域,而 let/const 天然支持这一点,var 则会“逃逸”出块,造成意外污染和逻辑混乱。
函数内优先用 const,只在真需重赋值时才用 let
const 是默认选择,哪怕变量值后续会变,只要不是“重新指向新内存地址”,就仍适用:
- 函数参数(如
function render(data) { const items = data.list || []; ... })→ 用const,参数绑定不可变 - 计算中间值(如
const total = price * qty;、const isValid = input.trim() !== '';)→ 用const - 状态标志(如
let isLoading = true;后续要设为false)→ 必须用let - 循环计数器(
for (let i = 0; i )→ 用 <code>let,因每次迭代需新建绑定;但若只是遍历且不修改索引(如for (const item of arr)),const更安全
避免 var 在函数内出现,尤其别混用
var 在函数内仍属函数作用域,但它会提升、可重复声明、且在 if/for 块中不隔离,极易引发隐蔽 bug:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- ❌ 错误示范:
if (cond) { var msg = 'error'; } console.log(msg); // 可能输出 'error' 或 undefined,行为难预测 - ✅ 正确写法:
if (cond) { const msg = 'error'; console.log(msg); } // msg 仅在此块内有效 - 同一函数中混用
var和let会导致作用域逻辑断裂,维护成本陡增,应全函数统一升级
函数作用域 ≠ 块作用域,但要用块级思维组织代码
函数体是容器,真正控制可见性的单位是 {}。合理拆分逻辑块,让变量生命周期最小化:
立即学习“Java免费学习笔记(深入)”;
- 把条件分支、循环、临时处理逻辑用独立块包裹:
{ const temp = compute(); doSomething(temp); } - 避免在函数顶部堆叠一堆
let声明,等实际用到再声明(配合暂时性死区,反而提升可读性) - 顶层函数变量(如配置常量、工具函数引用)仍用
const声明,它们属于该函数的“静态上下文”,而非运行时状态
注意函数参数与内部变量的边界
函数参数本身具有绑定不可变性(类似 const),但若需修改,应显式用 let 重新声明:
- ❌ 不推荐直接改参:
function handle(user) { user.name = 'new'; }(副作用,破坏纯度) - ✅ 推荐方式:
function handle(originalUser) { const user = { ...originalUser, name: 'new' };或明确用let user = originalUser;表达意图 - 箭头函数参数同样遵循此规则,无例外

















