推荐答案
在 ECMAScript 6 (ES6) 中,你可以在函数定义时使用默认参数。默认参数允许你在调用函数时,如果没有提供某个参数,函数会自动使用预定义的默认值。
function greet(name = "Guest", message = "Welcome") {
console.log(`${message}, ${name}!`);
}
greet(); // 输出: Welcome, Guest!
greet("Alice"); // 输出: Welcome, Alice!
greet("Bob", "Hello"); // 输出: Hello, Bob!在这个例子中,name 和 message 参数都有默认值。如果调用 greet() 时不传递任何参数,函数会使用默认值 "Guest" 和 "Welcome"。
本题详细解读
默认参数的基本用法
默认参数允许你在函数定义时为参数指定默认值。如果调用函数时没有传递该参数,或者传递的值为 undefined,函数将使用默认值。
function multiply(a, b = 1) {
return a * b;
}
console.log(multiply(5)); // 输出: 5
console.log(multiply(5, 2)); // 输出: 10在这个例子中,b 的默认值是 1。如果调用 multiply(5) 时没有传递第二个参数,b 将使用默认值 1。
默认参数与 undefined
如果调用函数时传递的参数是 undefined,函数也会使用默认值。
function sayHello(name = "World") {
console.log(`Hello, ${name}!`);
}
sayHello(); // 输出: Hello, World!
sayHello(undefined); // 输出: Hello, World!
sayHello("Alice"); // 输出: Hello, Alice!在这个例子中,sayHello(undefined) 也会使用默认值 "World"。
默认参数表达式
默认参数不仅可以是简单的值,还可以是表达式。这些表达式在函数调用时会被求值。
// www.javascriptcn.com code example
function createUser(name, id = generateId()) {
return { name, id };
}
function generateId() {
return Math.floor(Math.random() * 1000);
}
console.log(createUser("Alice")); // 输出: { name: 'Alice', id: 123 } (id 是随机生成的)在这个例子中,id 的默认值是通过调用 generateId() 函数生成的。
默认参数的作用域
默认参数的作用域是独立的,它们不会影响函数体内的变量。
let x = 1;
function foo(y = x) {
let x = 2;
console.log(y);
}
foo(); // 输出: 1在这个例子中,y 的默认值是全局变量 x 的值 1,而不是函数体内重新定义的 x 的值 2。
默认参数的顺序
默认参数可以放在参数列表的任何位置,但通常建议将带有默认值的参数放在参数列表的末尾。
function bar(a, b = 2, c) {
console.log(a, b, c);
}
bar(1, undefined, 3); // 输出: 1 2 3在这个例子中,b 的默认值是 2,即使它位于 a 和 c 之间。