JavaScript函数,可以接受不同格式的参数。

3

最近我被要求写一个JavaScript函数(这是一项编程测试),他们希望我实现一个函数,它可以添加并返回值。

add(3,2);//should return 5
add(3)(2); //should return 5

我不确定这是否有可能。我不是javascript专家,所以无法从谷歌搜索中得到任何线索。


1
你需要的机制叫做柯里化(currying)。可以在这里查看更多信息这里。在我看来,JS框架中最好的例子就是这个(仅供参考)。 - Kiril
2个回答

5

您需要先检查是否提供了第二个参数;如果是,则立即返回结果;否则,返回一个完成加法的函数:

function add(a, b)
{
    if (typeof b == 'undefined') {
        return function(b) {
            return a + b;
        }
    } else {
        return a + b;
    }
}

或者,如果您不喜欢重复的逻辑:

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

    return typeof b == 'undefined' ? f : f(b);
}

这也被称为 偏函数应用 或柯里化。


1
不错。这是函数式编程中柯里化的一个例子。您可以在此处找到通用形式并阅读更多信息:http://tech.pro/tutorial/2011/functional-javascript-part-4-function-currying - sahbeewah
1
谢谢Jack和其他所有人。我之前不知道“柯里化”这个词,现在我会更深入地探索它 :) - Tamil
@sahbeewah 是的,或者部分函数应用 :) - Ja͢ck

0

add(x,y)的解决方案:

function add(x, y) {
    return x + y
}

add(x)(y)的解决方案:

function add(x) {
  return function(y){
    return x+y;
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接