我被告知了一些我不熟悉的东西,我真的很想知道如何以及为什么会这样做:
假设我们有一个名为myfunc的函数,可以用两种方法之一调用它并返回相同的值(假设简单地添加整数):
myfunc(1,2)
myfunc(1)(2)
我看了一遍,找不到第二个电话的任何例子。我的理解是函数可以返回一个函数对象(可能定义为闭包或lambda?),然后作为参数传递?
答案 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);