我正在尝试制作一个接受另一个函数并仅通过使用函数表达式/应用程序重复输出该函数的函数。
到目前为止,我有一个函数twice
,它接受另一个函数作为参数并返回func(func(x))
:
function twice(func) {
function x(x) {
return func(func(x));
}
return x;
}
我正在尝试制作一个 repeater
函数,这样 const thrice = repeater(twice)
返回 func(func(func(x)))
和 const fourtimes = repeater(thrice)
等,但我对如何执行此操作感到困惑。任何帮助将不胜感激。谢谢
最佳答案
使用您当前的结构是不可能的,因为 twice
不会公开对 func
的引用,因此 repeater
无法调用它。
我能想到的唯一解决方案是通过(隐藏)属性从内部泄漏 func
:
const r = Symbol();
const repeater = f => Object.assign(
v => f[r] ? f(f[r](v)): f(v),
{ [r]: f[r] || f }
);
const addThree = repeater(repeater(repeater(n => n + 1)));
console.log(addThree(10));
关于javascript - 试图仅使用高阶函数来制作转发器功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57738949/