我不明白这个javascript函数调用以及它将在何处使用

时间:2015-04-27 13:38:58

标签: javascript function

我被告知了一些我不熟悉的东西,我真的很想知道如何以及为什么会这样做:

假设我们有一个名为myfunc的函数,可以用两种方法之一调用它并返回相同的值(假设简单地添加整数):

myfunc(1,2)
myfunc(1)(2)

我看了一遍,找不到第二个电话的任何例子。我的理解是函数可以返回一个函数对象(可能定义为闭包或lambda?),然后作为参数传递?

2 个答案:

答案 0 :(得分:8)

这称为currying。在您的示例中,函数可能如下所示:

function myfunc(a, b) {
    if (b === undefined || b === null)
        return function(c) { return myfunc(a, c) }

    return a + b;
}

基本上,如果参数b没有被传递,它会返回一个新函数,该函数调用自身,第一个参数绑定到它已经知道的参数。对返回函数的未来调用只需要第二个参数,在此处的示例中将其作为c传递。

以这种方式使用curried函数意味着您可以创建对函数的引用以执行特定功能,例如:

var add5 = myfunc(5);
console.log(add5(6)); //11

就在您原来的帖子中,您立即调用curried函数,而不在变量中存储对它的引用。

答案 1 :(得分:1)

如果你在Javascript中理解了很好的功能,这很容易。

试试这个:

console.log(typeof myfunc(1)); // return : 'function'

所以:你可以做到这一点(更具可读性)

var result = myfunc(1);
result(2);