Z
ZHANK
函数

参数与默认值

学习默认参数、剩余参数、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](已改变!)