可以通过两种方式调用的单个函数

时间:2015-08-03 19:45:04

标签: javascript

我试图写一个可以用两种方式调用的函数:

sum(3,5); //8

OR

sum(3)(5); //8

这显然不够:

function sum (a,b){
  return a + b;
}

这是我到目前为止的地方:

http://jsfiddle.net/marcusdei/a8tds42d/1/

4 个答案:

答案 0 :(得分:5)

您可以这样做:

UIBarButtoItem

答案 1 :(得分:3)

为什么放在一边(你为什么要这样做? - ans:homework)

function sum (a,b){
    if(b === undefined)
    {
        return function summer(next){
            return a + next;
        }
    }
    return a + b;
}

Upadted fiddle:http://jsfiddle.net/a8tds42d/2/

答案 2 :(得分:2)

正如另一种选择:

function sum (a,b) { 
    if (b === undefined) { 
        return sum.bind(null, a); 
    } 
    return a + b; 
}

使用bind来制作咖喱。

答案 3 :(得分:1)

你需要的是写一个咖喱功能。 Kevin Ennis详细介绍了如何在这里实施一个。

https://medium.com/@kevincennis/currying-in-javascript-c66080543528

这里是上述帖子的功能(以防帖子消失)

function curry( fn ) {
   var arity = fn.length;
   return (function resolver() {
      var memory = Array.prototype.slice.call( arguments );
      return function() {
        var local = memory.slice(), next;
        Array.prototype.push.apply( local, arguments );
        next = local.length >= arity ? fn : resolver;
        return next.apply( null, local );
      };
   }());
}

fiddle

或者你可以使用Ramda.js和这里使用Ramda

http://bit.ly/1IfaVM5