Currying - 在JavaScript中如何使用第二个参数调用返回的函数?
问题描述:
如何在liftf(add)(1)中调用第二个参数?Currying - 在JavaScript中如何使用第二个参数调用返回的函数?
function add (first, second) {
return first + second;
}
function liftf (binary) {
return function (first) {
return function (second) {
return binary(first, second);
};
};
}
var inc = liftf(add)(1);
我明白lift(add)是如何被调用和存储的。
我很困惑函数如何返回,但随后调用(1)。
我首先研究了它是否按照IIFE的相同原理进行操作,但似乎没有。 IFFE将是(function(){}())vs funciton(){}()。
'链接'函数的参数混淆了我,我想了解发生了什么。
谢谢!
答
如果一个表达式求值为一个函数,那么可以用圆括号和参数列表调用该函数。
由于表达liftf(add)
返回功能,请用小括号调用返回的功能与参数1
:liftf(add)(1)
另一种方式来看待它,如果你设置liftf(add)
给一个变量,那么你可以调用函数存储在该变量中:
var additionFunc = liftf(add) // Stores the new function in additionFunc
var result = additionFunc(1) // Evaluates the new function
让我们来看看IIFEs。假设我们有一个这样的:
(function(x) {return x + 1})(5)
的(function() { /* ... */ })
表达式计算为一个函数,其然后由括号和参数(5)
评价。
答
让我们看讨好的一个简单的例子:
function add(x) {
return function (y) {
return x + y;
};
}
如果只有一个参数调用它,就像这样:
add(2);
这将扩展为:
function (y) {
return 2 + y;
}
这会期望y
参数(如果您称之为)。你可以运行这样的:
function (y) {
return 2 + y;
}(5)
或者更succintcly:
add(2)(5);
每个函数柯里时,所以即使它看起来奇怪,一旦你走出展开代码只是扩展到新的匿名功能,它将开始有意义。
这就是一个值后的'()' - 调用它。 –
'add = first','1 = second'。如果你明白'liftf(add)'是一个函数,那么你应该明白用'1'调用这个函数并不是奇迹,因为这是函数的功能:被调用。 – trincot