实现代码
function calculateTotal(prices: number[], discount: number = 1, includeShipping: boolean = true): number {
let subtotal = prices.reduce((acc, price) => acc + price, 0);
let discountedSubtotal = subtotal * discount;
return includeShipping ? discountedSubtotal + 10 : discountedSubtotal;
}
参数默认值的作用及复用性
- 折扣率默认值
1
:在大部分商品无折扣的场景下,调用函数时无需传入折扣率参数,简化了调用过程。若遇到有折扣的商品,只需传入相应的折扣率即可,提高了函数在不同折扣场景下的复用性。
- 是否包含运费默认值
true
:多数情况下商品总价是包含运费的,所以默认设置为 true
。当遇到特殊情况(如包邮),可以传入 false
来计算不包含运费的总价,增强了函数在运费处理上的灵活性和复用性。
潜在问题
- 参数顺序问题:如果调用者不熟悉函数参数顺序,可能会错误地传入参数,例如将是否包含运费的布尔值传入折扣率参数位置,导致计算结果错误。
- 假设性问题:默认运费为
10
元写死在函数内部,若运费规则发生变化,需要修改函数内部代码,可能影响到依赖该函数的其他业务逻辑。另外,默认折扣率为 1
和默认包含运费的假设,在某些特殊业务场景下,可能需要额外的处理来覆盖默认值,增加了代码复杂性。