在 Javascript 中向函数传递未知数量的参数

front end technologyjavascriptobject oriented programming

术语"参数"和"函数的参数"在 JavaScript 中经常被当作同义词使用,尽管两者之间存在实质性区别。函数参数包含在定义函数时。在定义函数时,您还可以指定变量列表;这些变量称为函数参数。另一方面,"函数参数"是我们在调用或执行新创建的函数时传递的值。

在 JavaScript 中,函数声明中列出的变量用作参数值。函数定义中的参数在我们创建函数时使用。下面提供的语法显示了可以放在括号内并用逗号分隔的参数数量。

示例 1

无论函数声明指示什么,JavaScript 都允许您在调用函数时传递任意数量的参数。函数参数长度不受限制。

在此示例中,让我们通过创建一个接受两个参数的函数来理解基本示例。任何数量的输入都将始终产生相同的结果,因为它仅接受前两个参数。

<!DOCTYPE html> <html> <title>Passing unknown number of arguments to a function in JavaScript - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> // function with two parameters function addPara(x, y) { return x + y; } document.write(addPara(5, 3) +'<br>'); // 8 document.write(addPara(5, 3, 2)); // 8 </script> </body> </html>

我们必须创建一个可以接受任意数量输入的函数。我们有两种方法可以处理它。

  • 参数对象 (ES5)
  • 剩余参数 (ES6)

参数对象 (ES5)

示例 2

JavaScript 中的所有非箭头函数都可以访问称为参数的本地 JavaScript 对象变量。提供给函数的参数的值存储在名为参数的类似数组的对象中,该对象可在函数内部访问。

在此示例中,让我们了解如何在 ES5 中编写一个接受 n 个参数的函数 −

<!DOCTYPE html> <html> <title>Passing unknown number of arguments to a function in JavaScript - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> // function with n number of parameters function addPara() { let addNum = 0; for (let i = 0; i < arguments.length; i++) { addNum += arguments[i]; } return addNum; } document.write(addPara(5, 10, 15) +'<br>'); // 30 document.write(addPara(10, 20, 30, 40, 50) +'<br>'); // 150 document.write(addPara(10, 20, 10, 20)); // 60 </script> </body> </html>

示例 3

除非使用 Array.from 方法将参数对象转换为数组,否则无法使用 reduce 方法,因为默认情况下它不是数组。箭头函数无法处理参数对象。

<!DOCTYPE html> <html> <title>Passing unknown number of arguments to a function in JavaScript - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> // function with n number of parameters function addPara() { let arg = Array.from(arguments); return arg.reduce(function (acc, cur) { return acc + cur; }) } document.write(addPara(5, 10, 15) +'<br>'); // 30 document.write(addPara(10, 20, 30, 40, 50) +'<br>'); // 150 document.write(addPara(10, 20, 10, 20)); // 60 </script> </body> </html>

剩余参数 (ES6)

示例 4

为了处理无限数量的参数,剩余参数 提供了一种更简单、更干净的方法。上一个示例现在应包含一个 剩余参数。我们可以使用与 扩展运算符 具有相同语法的 剩余参数 向我们的函数传递无限数量的参数。

<!DOCTYPE html> <html> <title>Passing unknown number of arguments to a function in JavaScript - TutorialsPoint</title> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body style="text-align:center"> <script> // using rest parameter in ES6 function addPara(...args){ return args.reduce(function (acc, cur) { return acc + cur; }) } document.write(addPara(5, 10, 5) +'<br>'); // 20 document.write(addPara(10, 20, 10, 20, 30) +'<br>'); // 90 document.write(addPara(10, 20, 10, 20)); // 60 </script> </body> </html>

以下是其余参数和参数对象之间的区别 -

其余参数数组可以直接应用于所有数组方法,例如 map、sort 和 filter,但不允许使用参数对象。在对参数对象使用数组方法之前,必须先将其转换为真正的数组。

就函数的使用方式而言,其余参数更直接,语法合乎逻辑。                                  

arguments 对象具有其独有的附加功能(如 callee 属性)。

箭头函数无法访问参数对象。


相关文章