规范变量管理需用 const/let 替代 var,按语义分层命名,禁用全局变量,依托模块边界与状态管理器,并结合 TypeScript 类型约束强化安全性。

在大型单页应用中规范变量管理,核心是控制作用域、明确生命周期、防止污染,并让团队协作有据可依。不是靠记忆或约定,而是靠语言特性+工程约束共同落地。
用 const/let 替代 var,从源头切断作用域混乱
var 的函数作用域和变量提升极易引发意外覆盖和调试困难。现代项目中应完全弃用:
- 默认用 const 声明所有变量——包括对象、数组、函数、模块导入项;即使内容可变,引用本身也不该被重新赋值
- 仅当变量需多次赋值(如循环计数器、状态暂存、异步中间值)时才改用 let
- 禁止在 if/for 等块级结构内用 var 声明;否则变量会泄露到整个函数作用域,破坏封装性
按语义分层命名,让变量名自带上下文
变量名不是标签,而是契约。命名要能回答“它是什么、在哪用、怎么变”:
- 布尔值统一加 is / has / should 前缀,如
isLoading、hasPermission、shouldRetry - 函数名用动词开头,体现行为意图,如
fetchUserProfile()、validateForm() - 常量全大写加下划线,如
API_TIMEOUT_MS、MAX_RETRY_COUNT - 避免缩写和单字母(
u、tmp、res),用user、tempConfig、response替代
限制全局变量,用模块边界替代“挂 window”
大型 SPA 中的“全局变量”往往是状态泄漏和竞态的起点:
立即学习“Java免费学习笔记(深入)”;
- 所有业务变量必须声明在模块作用域内,通过 ES6 import/export 显式暴露接口
- 禁用
window.xxx = ...或直接给this动态加属性的方式共享数据 - 跨模块状态统一交由状态管理器(如 Pinia、Zustand)或中央注册表(如 Map
)托管,不靠变量名拼接或隐式查找 - 配置类常量可集中导出为
config.ts,而非散落在各文件顶部用const API_URL = '...'
配合 TypeScript 强化约束,把运行时问题挡在编译期
光靠命名和作用域还不够,类型系统是变量管理的“第二道锁”:
- 为所有对象字段标注必填/可选,用
Partial<T>、Required<T>精确表达动态字段语义 - 避免
any和Object,用接口或类型别名定义结构,如interface UserDTO { id: string; name?: string; } - 对高频访问的可选字段,封装访问器方法(如
getUserEmail()),内部做存在性判断并返回默认值,调用方无需重复写?. || '' - 禁用
eval、Function构造器等动态执行方式——它们绕过类型检查,也破坏静态分析


















