我们在编写代码时,都有可能会遇到这样的一个需求。我们要写一个函数,这个函数要对接收的参数进行处理,但是我们接受的参数是不确定的,可能是一个或者两个,甚至更多。但是我们常用的方式都是需求声名确定的参数的,那我们要怎么办呢?
接下来我们就好好说说解决办法!!!!!
怎么才能让我们的函数接收无数的参数呢?
先上结论:编写一个不定参函数
什么是不定参函数?
可以向它传递任意数量的参数,我们就称之为不定参函数。如果函数可接收的参数数量是固定的,则它不是可变参数
Math.min()和Math.max()在 JavaScript中就是典型的不定参函数。
编写一个不定参函数
因为我们要接收的参数数量是不确定的,所以我们需要使用到arguments关键字。
arguments关键字用于创建一个类数组对象,其中包含调用函数时传递给该函数的所有参数。因为arguments对象是一个局部变量,不能再全局下使用,所以我们的箭头函数也就不能使用arguments关键字了。
因为arguments关键字提供了一个类似数组的参数对象,所以我们可以通过其索引访问每个参数,并且参数的迭代也可以在.length属性下实现。所有数组方法也可用于对参数执行不同的操作。
代码示例:
function sumall()
{
let x = 0;
//遍历我们的每一个参数,然执行
for (let i = 0; i < arguments.length; ++i)
x += arguments[i];
return x;
}
//传入不同的参数获取不同的结果
let num1 = sumall(7, 9, 20);
let num2 = sumall(25, 73, 19, 32);
//打印我们的结果
console.log(num1);
console.log(num2);
结果:
36
172
我们可以看到,无论我们传入多少个参数,函数都能够对它们进行求值。
将数组作参数
我们也可以将整个数组作为参数传递给函数。我们可以通过使用展开运算符(...)将数组值作为单独的参数展开到函数来实现这一点。
//将数组当做参数结构传入
let sampleArr = [3, 8, -16, 13, 18);
let num3 = sumall(10,20,30, ...sampleArr);
//打印结果
console.log(num3);
结果:
85
我们也可以使用由ES6结构运算符的写法 ( ... ) 来表示的剩余运算符来代替arguments关键字。 此运算符允许您在第一个参数之后传递任意数量的参数。 它基本上是一个占位符,代表第一个参数之后的任何剩余参数。它在用法上与arguments关键字非常相似。
代码示例:
function sumall(...args)
{
let x = 0;
for (let i = 0; i < args.length; ++i)
x += args[i];
return x;
}
写在最后
伙伴们,如果你觉得我写的文章对你有帮助就给zayyo点一个赞👍或者关注➕都是对我最大的支持。当然你也可以加我微信:IsZhangjianhao,邀你进我的前端学习交流群,一起学习前端,成为更优秀的工程师~
开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 20 天,点击查看活动详情