В чем смысл "... 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, которая получает их как обычные аргументы.