优先用类声明,因其结构清晰、可读性强且适合模块顶部集中定义;需延迟初始化或解决循环依赖时选类表达式,它提供时机控制灵活性;命名上类声明自带名称,类表达式默认匿名但可通过显式命名确保堆栈可读性;一律使用 const 或 let 声明类表达式。

选类声明还是类表达式,关键看使用场景和依赖关系,不是语法高下问题。
需要提前调用或模块内复用时,优先用类声明
类声明必须先定义再使用,但结构清晰、可读性强,适合大多数常规类定义。比如在模块顶部集中定义业务模型类:
- 类名直接出现在代码中,IDE 和类型系统(如 TypeScript)更容易识别和补全
- 配合 export default 或 export { MyClass } 使用,语义明确,ES 模块解析稳定
- 避免在类内部引用自身时出现 undefined 风险(类声明有名字绑定,而匿名类表达式没有)
需要延迟初始化或解决循环依赖时,选类表达式
类表达式本质是赋值语句,变量声明提升但赋值不提升,这反而提供了控制时机的灵活性:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
- 可在函数作用域内动态创建类,比如根据配置返回不同行为的类
- 两个类互相引用时,可用 let 声明变量 + 后续赋值绕过暂时性死区(TDZ)
- 配合工厂函数封装,实现按需实例化,减少初始加载负担
涉及 typeof、instanceof 或调试时,注意命名差异
类声明自带名称,类表达式默认匿名——这对运行时检查和错误堆栈有实际影响:
立即学习“Java免费学习笔记(深入)”;
- class Person {} → Person.name === "Person",instanceof 判断可靠
- const Person = class {} → Person.name === "Person"(因为变量名被自动推断)
- const Person = class _Person {} → 显式命名,确保堆栈中显示 _Person,且 name 不受变量重赋值影响
不要用 var 声明类表达式
var 会提升声明和初始化,但类本身不能被 var “真正提升”,结果不可预测:
- var MyClass = class {} 在某些旧环境可能表现为 undefined 或 TypeError
- 一律使用 const 或 let,符合现代规范,也避免意外重绑定
- const 更常用,因为类定义通常不需重新赋值

















