临时变量命名应体现瞬时角色而非随意缩写:按用途明确命名(如currentItem、discountedPrice)、布尔值统一加is/has/can前缀、禁用str/arr等类型化命名、小作用域可简短但须语义清晰。

临时变量本身不承载长期语义,但命名仍需“有据可依”——它不该是随意的 i、temp 或 res,而应反映它在当前上下文中的**瞬时角色**。关键不是避免临时性,而是让这个“临时”变得可理解、可追踪。
按用途明确角色,而非笼统叫“temp”
临时变量存在的目的总是服务于某个具体动作:可能是中间计算结果、遍历过程中的当前项、条件分支里的暂存值、或对象解构后的别名。命名应直指该用途:
- 循环中当前元素:用
currentItem、user、product—— 而非item或temp - 计算中间值:如
discountedPrice、formattedDate、isValidEmail—— 名字里带动词或状态,说明“它是什么结果” - 解构重命名:用
const { id: userId, name: userName } = user;—— 别名清晰表达新上下文,避免歧义 - 条件暂存:比如
const shouldShowBanner = user.plan === 'premium' && !user.seenBanner;—— 一眼看出逻辑意图,比const flag = ...强十倍
布尔型临时变量统一加 is / has / can 前缀
这类变量本质是状态快照,命名必须自带真假语义:
- ✅
isFormValid、hasUnsavedChanges、canSubmit - ❌
valid、changed、submit(无主语、无时态、易误解)
前缀不只是习惯,它让阅读者无需看赋值表达式就能预判变量用途,极大降低认知负荷。
避免纯技术性命名,拒绝“变量类型即名字”
不要因为它是字符串就叫 str,是数组就叫 arr,是对象就叫 obj。JavaScript 的弱类型特性本就模糊了类型边界,靠名字补类型信息反而掩盖真实意图:
- ❌
const str = getName();→ 不知道这是用户昵称?API 错误消息?还是路径片段? - ✅
const displayName = getName();或const errorMessage = getName(); - ❌
const arr = getActiveUsers(); - ✅
const activeUsers = getActiveUsers();(变量名本身就是复数名词,已暗示数组)
作用域越小,名字可以越短,但不能失去指向性
在极短作用域内(比如单行箭头函数、for 循环体),允许适度简化,但底线是:不能让读者停下来想“这到底指啥?”
- ✅
users.map(user => user.email)——user简洁且上下文明确 - ✅
items.filter(item => item.price > 100) - ❌
items.filter(x => x.p > 100)(缩写无共识、字段名模糊) - ❌
data.forEach(d => process(d))(d和process都空洞)
简短的前提是“上下文足够强”,而不是“我懒得打字”。一旦作用域扩大(比如函数体超过5行),就该回归完整语义名。


















