在 ES2016(ES7)中,JavaScript 的函数可以使用可变长度参数列表,也称为 rest parameters(剩余参数)。这个新特性使得我们能够更加灵活地编写函数,尤其是当我们不知道函数需要接收多少个参数时。
什么是可变长度参数列表?
可变长度参数列表是一种特殊的函数参数,它允许我们在函数声明中使用三个点(...)来表示函数可以接收任意数量的参数。这些参数会被收集到一个数组中,并作为函数的最后一个参数。
下面是一个简单的示例:
function sum(...args) { return args.reduce((a, b) => a + b, 0); } console.log(sum(1, 2, 3)); // 6 console.log(sum(4, 5, 6, 7)); // 22
在这个示例中,我们定义了一个名为 sum
的函数,它使用可变长度参数列表来接收任意数量的参数。我们可以通过在调用函数时传递不同数量的参数来测试函数的灵活性。
如何使用可变长度参数列表?
使用可变长度参数列表非常简单。我们只需要在函数声明中的最后一个参数前加上三个点(...),就可以将所有的参数收集到一个数组中。
下面是一个更复杂的示例:
function join(separator, ...args) { return args.join(separator); } console.log(join(', ', 'apple', 'banana', 'orange')); // "apple, banana, orange" console.log(join('- ', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday')); // "Monday- Tuesday- Wednesday- Thursday- Friday"
在这个示例中,我们定义了一个名为 join
的函数,它使用可变长度参数列表来接收任意数量的参数。我们还定义了一个名为 separator
的参数,它用于指定连接字符串的分隔符。在函数体中,我们使用 join()
方法将所有的参数连接成一个字符串,并使用分隔符分隔它们。
注意事项
使用可变长度参数列表有一些注意事项,需要我们特别关注。
首先,可变长度参数列表只能出现在函数声明的最后一个参数位置。这是因为 JavaScript 引擎需要将所有的参数收集到一个数组中,并将它们作为函数的最后一个参数传递给函数体。
其次,可变长度参数列表不会收集函数声明中的默认参数。如果我们需要在函数声明中同时使用可变长度参数列表和默认参数,我们需要将默认参数放在可变长度参数列表之前。
下面是一个示例:
function format(separator = ', ', ...args) { return args.join(separator); } console.log(format(' ', 'John', 'Doe')); // "John Doe" console.log(format('_', 'Jane', 'Doe', 'Smith')); // "Jane_Doe_Smith" console.log(format()); // ""
在这个示例中,我们定义了一个名为 format
的函数,它使用可变长度参数列表和默认参数。我们将分隔符设置为默认值 ,
,并将可变长度参数列表放在默认参数之后。这样,我们就可以在调用函数时传递任意数量的参数,并使用默认的分隔符来将它们连接起来。
结论
ES2016(ES7)引入了可变长度参数列表,使得 JavaScript 函数更加灵活。使用可变长度参数列表,我们可以编写能够接收任意数量参数的函数,并将它们收集到一个数组中。但是,在使用可变长度参数列表时,我们需要注意一些细节,例如只能将它放在函数声明的最后一个参数位置,以及不能与默认参数混用等。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67622480856ee0c1d4fdb0ee