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

新手上路,请多包涵

在 Javascript 中阅读这个语法真的让我感到困惑:

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

…args 是什么意思?

原文由 Cesar Jr Rodriguez 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 405
2 个回答

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

它基本上是 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) ,请参阅 “foo(…arg)”(函数调用中的三个点)是什么意思? .

原文由 Felix Kling 发布,翻译遵循 CC BY-SA 4.0 许可协议

本质上,正在做的是:

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

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

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

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

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

原文由 bejado 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏