В чем смысл "... args" (три точки) в определении функции?
Мне было очень сложно прочитать этот синтаксис в Javascript:
router.route('/:id')
.put((...args) => controller.update(...args))
.get((...args) => controller.findById(...args));
Что означает ... args?
Ответы
Ответ 1
В отношении o (...args) =>
...args
представляет собой параметр rest. Он всегда должен быть последней записью в списке параметров, и ему будет назначен массив, содержащий все аргументы, которые не были назначены предыдущим параметрам.
В основном это замена объекта arguments
. Вместо написания
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) " (три точки в вызове функции)?.
Ответ 2
По существу, что делается:
.put((a, b, c) => controller.update(a, b, c))
Конечно, что, если мы хотим 4 параметра, или 5 или 6? Мы не хотим писать новую версию функции для всех возможных величин параметров.
Оператор spread (...
) позволяет нам принимать переменное количество аргументов и хранить их в массиве. Затем мы снова используем оператор смены, чтобы передать их функции update
:
.put((...args) => controller.update(...args))
Это прозрачно для функции update
, которая получает их как обычные аргументы.