本文档涵盖了 JavaScript 中处理函数参数和形参的最佳实践。函数参数对代码的可读性、可测试性和可维护性有着显著影响。精心设计的函数签名可以使代码更易于理解,并减少潜在的错误。
有关函数行为和副作用的信息,请参阅 函数行为。
函数参数是干净代码的关键方面。精心设计的函数形参通过以下方式帮助创建更具可测试性、可维护性的代码:
来源: README.md232-286
限制函数形参的数量对于编写干净、可维护的代码至关重要。推荐的做法是尽可能使用两个或更少的参数。
| 参数数量 | 建议 |
|---|---|
| 0-1 | 理想 - 简单易于测试 |
| 2 | 可接受 - 仍然相对易于管理 |
| 3 | 如果可能,请避免 - 考虑重构 |
| 4+ | 强烈不推荐 - 使用对象参数模式 |
来源: README.md232-243
当函数需要多个参数时,将它们合并到一个对象参数中。这种模式可以提高可读性,并使函数签名更加灵活。
糟糕的方法(多个参数)
好的方法(对象参数)
来源: README.md244-286
ES2015/ES6 的解构语法提供了一种处理函数中对象参数的简洁方式,使代码更具可读性和健壮性。
来源: README.md249-260
布尔标志参数(改变函数行为的布尔参数)是函数试图做不止一件事的标志,应该将其拆分成独立的函数。
当函数接受布尔标志时,它通常包含一个 if/else 语句,该语句遵循两条不同的代码路径。这违反了“函数应该只做一件事”的原则。
糟糕的方法(使用标志)
好的方法(单独的函数)
来源: README.md565-591
JavaScript 提供了两种主要处理默认参数值的方法:默认参数语法和用于复杂默认值的 `Object.assign`。
ES6 提供了简洁的默认参数语法
对于具有多个潜在默认值的复杂对象,请使用 Object.assign
来源: README.md204-228 README.md512-561
函数参数的数量与单一职责原则之间存在很强的关联。参数众多的函数常常因为试图做太多事情而违反这一原则。
随着函数参数数量的增加,所需的测试用例数量呈指数级增长。
| 参数 | 潜在状态 | 测试复杂性 |
|---|---|---|
| 1 | 2 (有效/无效) | 低 |
| 2 | 4 (2² 组合) | 中等 |
| 3 | 8 (2³ 组合) | 高 |
| 4 | 16 (2⁴ 组合) | 非常高 |
| 5 | 32 (2⁵ 组合) | 极高 |
来源: README.md232-243 README.md290-322
请记住,干净的代码是为了让您的意图清晰。设计良好的函数参数可以帮助您和其他开发人员更轻松地理解和维护代码。