Javascript 尝试仅使用高阶函数生成中继器函数?

Javascript 尝试仅使用高阶函数生成中继器函数?,javascript,Javascript,我试图通过只使用函数表达式/应用程序来创建一个接受另一个函数并重复输出该函数的函数 到目前为止,我有一个函数两次,它接受另一个函数作为参数并返回func(func(x)): 我正在尝试创建一个中继器函数,使常数三次=中继器(两次)返回func(func(func(x)),以及常数四次=中继器(三次)等。但是我不知道怎么做。任何帮助都将不胜感激。谢谢使用您当前的结构,这是不可能的,因为两次不会公开对func的引用,因此repeater无法调用它 我能想到的唯一解决方案是通过(隐藏)属性从内部泄漏f

我试图通过只使用函数表达式/应用程序来创建一个接受另一个函数并重复输出该函数的函数

到目前为止,我有一个函数
两次
,它接受另一个函数作为参数并返回
func(func(x))


我正在尝试创建一个
中继器
函数,使
常数三次=中继器(两次)
返回
func(func(func(x))
,以及
常数四次=中继器(三次)
等。但是我不知道怎么做。任何帮助都将不胜感激。谢谢

使用您当前的结构,这是不可能的,因为
两次
不会公开对
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=中继器(中继器(n=>n+1));
控制台日志(添加三(10))
您应该使用两种基本情况(
如果n==0=>exit
如果n==1=>返回f(x)
),其中
n
是一个附加参数,指定函数应使用参数重复多少次
args

函数中继器(func,x,n){
如果(n==0)返回;
如果(n==1)返回func(x);
否则{
返回func(中继器(func,x,--n));
}
}
设sqr=n=>n*n;

日志(中继器(sqr,2,3))你在找这样的东西吗

function chain(f, g) {
    return function (x) {
        return f(g(x));
    }
}

function ntimes(f, n) {
    if (n == 0) {
        return function (x) { return x }
    } else {
        return chain(f, ntimes(f, n-1));
    }
}

这将生成一个新函数,它将重复原来的函数
f
n
次。

但这并不是OP想要的。有什么理由不使用代码段吗?@adiga-yup,不要在手机上工作,我太懒了,无法手动复制标记。@jonaswillms你可以在许多手机浏览器中“请求桌面网站”(safari,chrome)…你有这个选择吗?是的,当我没有WiFi或无法使用笔记本电脑时,我会这么做。@JackBashford老实说,这不值得努力。有趣的是,两个问题的唯一有效答案却没有得到任何支持
function chain(f, g) {
    return function (x) {
        return f(g(x));
    }
}

function ntimes(f, n) {
    if (n == 0) {
        return function (x) { return x }
    } else {
        return chain(f, ntimes(f, n-1));
    }
}