怎么才能让我们的函数接收无限的参数呢?

178 阅读3分钟

我们在编写代码时,都有可能会遇到这样的一个需求。我们要写一个函数,这个函数要对接收的参数进行处理,但是我们接受的参数是不确定的,可能是一个或者两个,甚至更多。但是我们常用的方式都是需求声名确定的参数的,那我们要怎么办呢?

接下来我们就好好说说解决办法!!!!!

怎么才能让我们的函数接收无数的参数呢?

先上结论:编写一个不定参函数

什么是不定参函数?

可以向它传递任意数量的参数,我们就称之为不定参函数。如果函数可接收的参数数量是固定的,则它不是可变参数

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 天,点击查看活动详情