В отношении 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, это единственный способ создать переменные (стрелки).
Конечно, что, если мы хотим 4 параметра, или 5 или 6? Мы не хотим писать новую версию функции для всех возможных величин параметров.
Оператор spread (...) позволяет нам принимать переменное количество аргументов и хранить их в массиве. Затем мы снова используем оператор смены, чтобы передать их функции update:
.put((...args) => controller.update(...args))
Это прозрачно для функции update, которая получает их как обычные аргументы.