Похоже что тут можно было бы применить функциональные конвейеры из библиотек вроде Underscore, Ramda или что там ещё. Ещё можно сделать транспиляцию с помощью Babel
конвейерного оператора, который пока не добрался до стандарта. Работает всё это как-то так:
// где-то в библиотеке
function pipe(...fns) {
return function (arg) {
let result = arg;
for (let i = 0; i < fns.length; i++) {
result = fns[i](result);
}
return result;
}
}
// в коде
const result = pipe(
f3,
f2,
_ => f1(_, 1),
_ => f0(_, 'test')
)(1000);
Но я считаю, что код станет более очевидным если его просто разбить на несколько строк:
const result3 = f3(1000)
const result2 = f2(result1)
const result1 = f1(result2, 1)
const result0 = f0(result2, 'test')