函数定义中的“...args”(三个点)是什么意思?
What is the meaning of "...args" (three dots) in a function definition?
阅读Javascript中的语法让我感到很困惑:
router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));
...args 是什么意思?
基本上,正在做的是:
.put((a, b, c) => controller.update(a, b, c))
当然,如果我们想要4个参数,或者5个,或者6个呢?我们不想为所有可能的参数数量编写新版本的函数。
spread operator (...
) 允许我们接受可变数量的参数并将它们存储在数组中。然后我们再次使用扩展运算符将它们传递给 update
函数:
.put((...args) => controller.update(...args))
这对 update
函数是透明的,函数将它们作为普通参数接收。
相对于(...args) =>
,...args
是rest 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)
,参见 。
“...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
如果您知道一些 Python 语法,它与 *args
完全相同。因为 *args
(Python) 是元组对象,而 Javascript 没有像 Python 这样的元组,所以 ..args
是一个数组对象。
阅读Javascript中的语法让我感到很困惑:
router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));
...args 是什么意思?
基本上,正在做的是:
.put((a, b, c) => controller.update(a, b, c))
当然,如果我们想要4个参数,或者5个,或者6个呢?我们不想为所有可能的参数数量编写新版本的函数。
spread operator (...
) 允许我们接受可变数量的参数并将它们存储在数组中。然后我们再次使用扩展运算符将它们传递给 update
函数:
.put((...args) => controller.update(...args))
这对 update
函数是透明的,函数将它们作为普通参数接收。
相对于(...args) =>
,...args
是rest 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)
,参见
“...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
如果您知道一些 Python 语法,它与 *args
完全相同。因为 *args
(Python) 是元组对象,而 Javascript 没有像 Python 这样的元组,所以 ..args
是一个数组对象。