参数传递
函数参数是函数与外界交互的桥梁,掌握参数传递方式让函数更加灵活。
基本参数
位置参数
JavaScript
function greet(name, age) {
console.log(`${name} is ${age}`);
}
greet('Tom', 18); // Tom is 18
形参与实参
JavaScript
function add(a, b) { // a, b 是形参
return a + b;
}
add(1, 2); // 1, 2 是实参
默认参数
ES6支持参数默认值:
JavaScript
function greet(name = 'Guest') {
console.log('Hello, ' + name);
}
greet(); // Hello, Guest
greet('Tom'); // Hello, Tom
默认值可以是表达式:
JavaScript
function greet(name, greeting = 'Hello, ' + name) {
console.log(greeting);
}
greet('Tom'); // Hello, Tom
剩余参数
使用 ... 收集多余参数:
JavaScript
function sum(...numbers) {
return numbers.reduce((a, b) => a + b, 0);
}
sum(1, 2, 3); // 6
sum(1, 2, 3, 4); // 10
与普通参数结合:
JavaScript
function log(level, ...messages) {
console.log(`[${level}]`, ...messages);
}
log('INFO', 'User', 'logged in'); // [INFO] User logged in
arguments对象
ES5获取所有参数的方式:
JavaScript
function sum() {
let total = 0;
for (let i = 0; i < arguments.length; i++) {
total += arguments[i];
}
return total;
}
sum(1, 2, 3); // 6
注意:箭头函数没有
arguments,应使用剩余参数。
解构参数
对象解构
JavaScript
function createUser({ name, age = 18 }) {
return { name, age };
}
createUser({ name: 'Tom' }); // { name: 'Tom', age: 18 }
数组解构
JavaScript
function getCoords([x, y]) {
return { x, y };
}
getCoords([1, 2]); // { x: 1, y: 2 }
参数传递机制
值传递
基本类型按值传递:
JavaScript
function change(x) {
x = 2;
}
let a = 1;
change(a);
console.log(a); // 1(不变)
引用传递
对象类型传递引用:
JavaScript
function change(obj) {
obj.name = 'changed';
}
const user = { name: 'Tom' };
change(user);
console.log(user.name); // changed
参数传递对比
| 方式 | 语法 | 特点 |
|---|---|---|
| 位置参数 | fn(a, b) | 按顺序传递 |
| 默认参数 | fn(a = 1) | 省略时使用默认值 |
| 剩余参数 | fn(...args) | 收集为数组 |
| 解构参数 | fn({a, b}) | 直接解构 |
要点总结
- 默认参数让函数调用更灵活
- 剩余参数
...收集多余参数为数组 - 箭头函数没有
arguments,用剩余参数替代 - 基本类型值传递,对象类型引用传递
- 解构参数可提高代码可读性
📝 发现内容有误?点击此处直接编辑