JavaScript变量声明与常量规范核心是按需选型、命名清晰、作用域明确:let用于可重赋值场景,const用于声明即确定且不重赋值的值,命名须语义化,配置常量宜集中管理,禁用var,优先块级作用域。

明确区分:变量 vs 常量
变量(let)用于后续可能重新赋值的场景,比如循环计数器、表单输入暂存、状态切换标识:
-
let count = 0;→ 后续会count++ -
let currentUser;→ 登录后赋值,可能中途更新
常量(const)用于**声明即确定、绝不重赋值**的值,包括原始值、对象引用、函数定义等:
const API_URL = 'https://api.example.com';const MAX_RETRY = 3;const formatDate = (date) => date.toISOString().split('T')[0];
注意:const 不冻结对象内容,只禁止重新赋值给该变量名。如需真正不可变,需配合 Object.freeze() 或使用不可变数据结构。
命名规范要体现语义
变量名不追求缩写,而要让人一眼看出用途和范围:
立即学习“Java免费学习笔记(深入)”;
- 常量全大写 + 下划线分隔:
DEFAULT_TIMEOUT、IS_PRODUCTION - 普通变量用小驼峰:
userName、isLoaded、userPreferences - 避免模糊名:
data、temp、val—— 改为userData、cachedConfig、selectedOption
配置类常量建议集中管理
项目中高频使用的配置项(如 API 地址、主题色、功能开关),适合抽成独立模块统一导出:
// config.js
export const ENV = {
DEV: 'development',
PROD: 'production'
};
export const API = {
BASE_URL: import.meta.env.VITE_API_BASE || 'http://localhost:3000/api',
TIMEOUT: 10000
};
export const FEATURES = {
ENABLE_ANALYTICS: true,
SHOW_BETA_UI: false
};
在组件或逻辑中直接解构导入:
import { API, FEATURES } from './config.js';
fetch(`${API.BASE_URL}/users`, { timeout: API.TIMEOUT });
这样既保证不可变性,又便于维护和环境适配。
避开常见误用陷阱
-
const必须初始化:const version;→ 报错;必须写成const version = '2.1.0'; - 不要用
var:它存在变量提升、函数作用域、可重复声明等问题,现代代码应完全弃用 - 块级作用域优先:
if或for内部用let/const,避免意外泄露到外层 - 避免一行多声明:
let a = 1, b = 2, c = 3;可读性差,调试困难,统一拆成多行



















