javascript - 如何在 JS 中创建重用返回结果的可变高阶函数

标签 javascript function variadic

假设我有数量未定的函数 f,每个函数都需要一个参数并返回一个结果。我应该如何编写一个函数“execute”,将第一个参数作为数字,将所有其他参数作为函数应用于前面每个函数的结果?

这是我的猜测:

let plus1 = d => d += 1;
let plus2 = d => d += 2;
let write = d => document.write(d);


let execute = function(n,...functions){
  functions.forEach((d)=>d(n));
}

execute(4,plus1,plus2,write); 

我期待 7 ((4+1)+2)。

感谢您的帮助!

最佳答案

您可以使用Array#reduce ,它在使用具有给定值的函数时返回结果。

let plus1 = d => d + 1,
    plus2 = d => d + 2,
    write = d => console.log(d),
    execute = (n, ...fn) => fn.reduce((n, f) => f(n), n);

execute(4, plus1, plus2, write); 

尤里·塔拉类科建议的较短版本

let plus1 = d => d + 1,
    plus2 = d => d + 2,
    write = d => console.log(d),
    execute = (...args) => args.reduce((v, f) => f(v));

execute(4, plus1, plus2, write); 

关于javascript - 如何在 JS 中创建重用返回结果的可变高阶函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44153432/

相关文章:

javascript - Firebase 云功能

javascript - jquery如何在点击链接时隐藏div

function - 具有angular2中函数的templateUrl

r - R 中的 `qr.qy()` 函数

C++ 将模板参数包从一个可变参数模板传递到另一个模板会导致编译器错误

javascript - React js日期选择器的多个实例

javascript - AJAX Post 的奇怪 Javascript/PHP 行为

c++ - 当数组位于两个循环之间时,可以调用数组的 void 函数吗?

prctl() 的正确使用方法

javascript - 可以在 Typescript 中输入递归可变参数函数吗?