参数就是函数的入口,调用时传进去,函数内部用形参接收。
核心三种:
① 普通参数——function fn(a,b) { }
② 默认参数——function fn(a=10) { } 没传就用默认值
③ arguments——函数内部所有实参的集合
坑:实参和形参数量可以不等、默认参数只在 undefined 时生效、arguments 不是真数组。
| 情况 | 结果 |
|---|---|
| 给的料 = 投料口 | 正常,一个对一个 |
| 给的料 > 投料口 | 多出来的直接扔掉 |
| 给的料 < 投料口 | 缺的那个投料口 = undefined,算起来容易出 NaN |
// 三个投料口
function add(a, b, c) {
// 三个加起来
return a + b + c;
}
// 只给2个料 → c 是空 → 1+2+空 = NaN
add(1, 2);
// 给4个料 → 多的那个扔掉,只用1+2+3=6
add(1, 2, 3, 4);
在投料口后面直接写 = 默认值,没给料时就自动用这个默认值,不会再出 undefined。
// 投料口后面写 = 默认值,忘了给料就用它
function add(a = 0, b = 0, c = 0) {
// 缺哪个就补0
return a + b + c;
}
// c 没给 → 用默认0 → 1+2+0=3
add(1, 2);
好处:好懂、好改、好单独用。反面是一台机器里又算账、又打印、又弹窗。正确:算的机器只管算账并把结果 return,打印的机器只管打印。
规则:0 普通不打折、1 白银 95 折、2 黄金 9 折、3 钻石 8 折。这台机器只负责算折扣价,不打印不弹窗。
function calcDiscount(price, level) {
// 先默认不打折
let rate = 1;
// 白银 → 95折
if (level === 1) rate = 0.95;
// 黄金 → 9折
else if (level === 2) rate = 0.9;
// 钻石 → 8折
else if (level === 3) rate = 0.8;
// 原价×折扣率,把结果递出去
return price * rate;
}
// 199×0.9 = 179.1
calcDiscount(199, 2);
① 用在哪:会员折扣计算、分页参数、可选配置项——都靠默认参数兜底。
② 常见坑:少传参数得到 NaN;一个函数里又算又打印又弹窗,乱成一锅。
③ 怎么解决:形参写 = 默认值;坚持单一职责——算的只 return,显示的单独打印。
| API | 作用 | 参数 | 返回值 | 代码示例 |
|---|---|---|---|---|
| 形参 | 定义时括号里的小名字 | 名字 | 接住调用传来的值 | function sum(a, b) {
return a + b;
} |
| f(a=1) | 默认值:没传就用 1 | 名字=默认值 | 无 | function f(a = 1) {
return a;
} |
| 多传的实参 | JS 不报错,多的收不到 | 任意个 | 忽略 | sum(1, 2, 3); // 第3个被忽略 |
| arguments | 旧写法收齐所有实参 | 无 | 类数组 | function f() {
console.log(arguments.length);
} |