javascript - 试图仅使用高阶函数来制作转发器功能?

标签 javascript

我正在尝试制作一个接受另一个函数并仅通过使用函数表达式/应用程序重复输出该函数的函数。

到目前为止,我有一个函数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/

相关文章:

javascript - 如何使用 JavaScript 生成 HTML 表单?

javascript - 获取多选中的所有选项

javascript - React.js 不在状态更新时重新渲染应用程序

php - 使用 SoundCloud API 取消关注

javascript - JDK 8 Nashorn Javascript 引擎限制

javascript - 将文本替换为 HTML 文件中的 html 标签

javascript - 为什么我的指令会因同一指令的另一个实例的更改而更新?

javascript - 从选择列表中删除项目 (Internet Explorer 10)

javascript - 使用 JQuery 的登录页面

javascript - 将普通数组转换为html中的对象数组