" ... args"是什么意思? (函数定义中的三个点)?

时间:2017-02-12 05:56:44

标签: javascript express ecmascript-6

在Javascript中阅读此语法真是令人困惑:

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

... args 是什么意思?

3 个答案:

答案 0 :(得分:19)

尊重(...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)?

答案 1 :(得分:10)

基本上,正在做的是:

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

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

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

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

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

答案 2 :(得分:0)

“…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