如何在javascript中实现函数调用的任意链? [复制]

2023-11-22

我已经写了代码来实现

sum(1)(2) //3

代码如下:

function sum(a) {

  return function(b) { 
    return a+b
 }

}

但我没有解决第二个问题,即如何实现任意数量的链函数调用,例如:

sum(1)(2) == 3
sum(5)(-1)(2) == 6
sum(6)(-1)(-2)(-3) == 0
sum(0)(1)(2)(3)(4)(5) == 15

通常你会做这样的事情:

var add = function(a,b){
    return a+b;
};

var sum = function(){
    return [].reduce.call(arguments, add);
}

然后你可以写:

sum(1,2,3,4); // 10

但有可能破解您想要的功能:

var sum = function(x){
    var f = function(y){
        return sum(x+y);
    };
    f.valueOf = function(){
        return x;
    };
    return f;
};

sum(1)(2)(3)(4); // 10

请不要在生产代码中这样做!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在javascript中实现函数调用的任意链? [复制] 的相关文章

随机推荐