投料不讲究就会翻车。今天解决三件事:料给多给少怎么办、ES6 默认参数兜底,以及做机器的铁律「一台机器只干一件事」。最后用一个会员折扣计算器实战。
| 情况 | 结果 |
|---|---|
| 给的料 = 投料口 | 正常,一个对一个 |
| 给的料 > 投料口 | 多出来的直接扔掉 |
| 给的料 < 投料口 | 缺的那个投料口 = undefined,算起来容易出 NaN |
function add(a, b, c) { // 三个投料口
return a + b + c; // 三个加起来
}
add(1, 2); // 只给2个料 → c 是空 → 1+2+空 = NaN
add(1, 2, 3, 4); // 给4个料 → 多的那个扔掉,只用1+2+3=6
在投料口后面直接写 = 默认值,没给料时就自动用这个默认值,不会再出 undefined。
// 投料口后面写 = 默认值,忘了给料就用它
function add(a = 0, b = 0, c = 0) {
return a + b + c; // 缺哪个就补0
}
add(1, 2); // c 没给 → 用默认0 → 1+2+0=3
好处:好懂、好改、好单独用。反面是一台机器里又算账、又打印、又弹窗。正确:算的机器只管算账并把结果 return,打印的机器只管打印。
规则:0 普通不打折、1 白银 95 折、2 黄金 9 折、3 钻石 8 折。这台机器只负责算折扣价,不打印不弹窗。
function calcDiscount(price, level) {
let rate = 1; // 先默认不打折
if (level === 1) rate = 0.95; // 白银 → 95折
else if (level === 2) rate = 0.9; // 黄金 → 9折
else if (level === 3) rate = 0.8; // 钻石 → 8折
return price * rate; // 原价×折扣率,把结果递出去
}
calcDiscount(199, 2); // 199×0.9 = 179.1
① 用在哪:会员折扣计算、分页参数、可选配置项——都靠默认参数兜底。
② 常见坑:少传参数得到 NaN;一个函数里又算又打印又弹窗,乱成一锅。
③ 怎么解决:形参写 = 默认值;坚持单一职责——算的只 return,显示的单独打印。