函数
参数与默认值
学习默认参数、剩余参数、arguments 对象
参数与默认值
ES6 带来了更灵活的参数处理方式。
学完本章你将: 掌握默认参数、剩余参数、解构参数。
默认参数
javascript
// ES5 方式
function multiply1(a, b) {
b = b || 1;
return a * b;
}
// ES6 默认参数(更清晰)
function multiply2(a, b = 1) {
return a * b;
}
console.log(multiply2(5)); // 5
console.log(multiply2(5, 2)); // 10
// 默认值可以是表达式
function create(name = "User", id = Math.random()) {
return { name, id };
}
// 后面的参数可以用前面的参数
function greet(name, greeting = `Hello, ${name}`) {
console.log(greeting);
}
greet("Alice"); // "Hello, Alice"
剩余参数(Rest)
javascript
// ... 收集剩余参数为数组
function sum(...numbers) {
return numbers.reduce((total, n) => total + n, 0);
}
console.log(sum(1, 2, 3, 4, 5)); // 15
// 部分固定 + 剩余
function log(level, ...messages) {
console.log(`[${level}]`, ...messages);
}
log("ERROR", "File not found", "Permission denied");
// 剩余参数替代 arguments
const max = (...nums) => Math.max(...nums);
console.log(max(3, 7, 1, 9)); // 9
解构参数
javascript
// 对象解构参数
function displayUser({ name, age, city = "未知" }) {
console.log(`${name}, ${age}岁, ${city}`);
}
const user = { name: "Alice", age: 25, city: "北京" };
displayUser(user); // "Alice, 25岁, 北京"
// 数组解构参数
function getFirstTwo([first, second]) {
return `${first} + ${second}`;
}
console.log(getFirstTwo(["A", "B", "C"])); // "A + B"
// 带默认值的解构
function createOptions({ timeout = 1000, retries = 3 } = {}) {
console.log(`timeout: ${timeout}, retries: ${retries}`);
}
createOptions(); // timeout: 1000, retries: 3
createOptions({ timeout: 500 }); // timeout: 500, retries: 3
参数传递规则
javascript
// 原始类型:传值(不影响外部)
function changeNum(x) {
x = 100;
}
let num = 10;
changeNum(num);
console.log(num); // 10(未改变)
// 引用类型:传引用(会影响外部)
function changeArr(arr) {
arr.push(4);
}
let arr = [1, 2, 3];
changeArr(arr);
console.log(arr); // [1, 2, 3, 4](已改变!)