函数定义中的“...args”(三个点)是啥意思?

Posted

技术标签:

【中文标题】函数定义中的“...args”(三个点)是啥意思?【英文标题】:What is the meaning of "...args" (three dots) in a function definition?函数定义中的“...args”(三个点)是什么意思? 【发布时间】:2017-06-30 07:04:05 【问题描述】:

javascript 中阅读这种语法真的让我很困惑:

router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));

...args 是什么意思?

【问题讨论】:

... 称为扩展运算符。 通常,...args 表示“任意数量的值”。例如,您可以传递 null1,2,3,4 - 没关系,并且该方法足够聪明,可以处理它。 是 ES6 中引入的新语法。请在此处查看文档developer.mozilla.org/en/docs/Web/JavaScript/Reference/… Rest parameters and spread syntax 找到了一个不错的教程。 这能回答你的问题吗? Spread Syntax vs Rest Parameter in ES2015 / ES6 【参考方案1】:

相对于(...args) =>...argsrest parameter。它始终必须是参数列表中的最后一个条目,并且将为其分配一个数组,其中包含尚未分配给先前参数的所有参数。

它基本上是arguments object 的替代品。而不是写

function max() 
  var values = Array.prototype.slice.call(arguments, 0);
  // ...

max(1,2,3);

你可以写

function max(...value) 
  // ...

max(1,2,3);

此外,由于箭头函数没有arguments 对象,这是创建可变参数(箭头)函数的唯一方法。


作为controller.update(...args),见What is the meaning of "foo(...arg)" (three dots in a function call)?。

【讨论】:

【参考方案2】:

“...args”(三个点)的含义是Javascript spread operator。

function sum(x, y, z) 
  return x + y + z;


const numbers = [1, 2, 3];

console.log(sum(...numbers));
// expected output: 6

【讨论】:

【参考方案3】:

基本上,正在做的是这样的:

.put((a, b, c) => controller.update(a, b, c))

当然,如果我们想要 4 个参数,或者 5 个,或者 6 个呢?我们不想为所有可能数量的参数编写新版本的函数。

spread operator (...) 允许我们接受可变数量的参数并将它们存储在一个数组中。然后我们再次使用扩展运算符将它们传递给update 函数:

.put((...args) => controller.update(...args))

这对update 函数是透明的,后者将它们作为普通参数接收。

【讨论】:

... is not an operator 和传播无关。

以上是关于函数定义中的“...args”(三个点)是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章

打字稿中的“三个点”是啥意思?

python中**是啥意思?

C语言里两个冒号是啥意思?

js中的var是啥意思,

指向函数成员的指针:`R(*C::*)(Args...)` 是啥意思?

c语言中num[50]是啥意思