1、默认参数
ES6 默认参数特性允许使用默认值初始化参数。这种比上面介绍的方法更好、更简洁。
// An highlighted block
function parameter(param1, param2 = 0) {
console.log(param2); // => 0
return param1 + param2;
}
parameter(1); // => 1
parameter(1, undefined); // => 1
2、解构参数
在JS函数参数中,咱特别喜欢的是解构的特性。可以将内联参数的对象或数组进行解构。这个特性使得从参数对象中提取一些属性非常有用
function parameter({ name }) {
return `Hello, ${name}!`;
}
const person = { name: '鸡腿' };
greet(person); // => 'Hello, 鸡腿'
{ name }是应用于对象解构的参数。
当然也可以结合默认参数:
function greetWithDefault({ name = '无名氏' } = {}) {
return `Hello, ${name}!`;
}
greetWithDefault(); // => 'Hello, 无名氏!'
3、arguments 对象
JS 函数的另一个很好的特性是能够用可变参数调用同一个函数。这样可以使用 arguments 对象来获取传入的所有参数。
arguments对象是所有(非箭头)
函数中都可用的局部变量。你可以使用arguments对象在函数中引用函数的参数。
例如,对函数的参数求和:
function argumentsSum() {
console.log(arguments); // { 0: 5, 1: 6, length: 2 }
let sum = 0;
for (let i = 0; i < arguments.length; i++) {
sum += arguments[i];
}
return sum;
}
argumentsSum(5, 6); // => 11
arguments 是一个对应于传递给函数的参数的类数组对象。
有个问题是,每个函数作用域都定义了自己的arguments对象。因此,可能需要一个额外的变量来访问外部函数作用域arguments:
function outerFunction() {
const outerArguments = arguments;
return function innerFunction() {
// outFunction arguments
outerArguments[0];
};
}
4、剩余参数
function sum(...numbers) {
console.log(numbers); // [5, 6]
return numbers.reduce((sum, number) => sum + number);
}
sum(5, 6); // => 11
…numbers是一个剩余参数,它将成为一个由剩余参数组成的真数组[5,6]。由于numbers 是一个数组,所以就可以使用数组自有方法reduce(与类数组对象的参数相反)。
如果不想在剩余参数中收集所有参数,则可以组合常规参数和剩余参数。
function multiplyAndSumArgs(multiplier, ...numbers) {
console.log(multiplier); // 2
console.log(numbers); // [5, 6]
const sumArgs = numbers.reduce((sum, number) => sum + number);
return multiplier * sumArgs;
}
multiplyAndSumArgs(2, 5, 6); // => 22
multiplier 是一个常规参数,它获取第一个参数的值。然后剩下的参数…numbers 接收剩余的参数。