javascript - 如何在javascript中实现函数调用的任意链?

标签 javascript chaining

<分区>

我已经写代码实现了

sum(1)(2) //3

代码如下:

function sum(a) {

  return function(b) { 
    return a+b
 }

}

但是我没有想出第二个问题,就是如何实现任意数量的链式函数调用 like:

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

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

关于javascript - 如何在javascript中实现函数调用的任意链?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26656718/

相关文章:

javascript - 在将 appendChild 与 native javascript 一起使用后,如何更新对 HTML 元素的引用

javascript - Chrome 扩展 HTML 树生成器不工作

java - 我如何声明这样的函数?

javascript - 想知道这个例子中 .delay() 的机制,jQuery

php - 从非公共(public)目录加载 css 或 javascript

javascript - 流量 promise : Cannot return request because Promise [1] is incompatible with <EntityType>

javascript - gif 动画完成后如何激活页面滚动

c++ - 有没有办法在 C++ 中将方法存储在某种类型的 vector 中?

Coffeescript 和 jQuery 链接

JavaScript RegExp 替换文本