如何在liftf(add)(1)中调用第二个参数?
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(){}()。
'链式'函数参数让我感到困惑,我想了解发生了什么。
谢谢!
答案 0 :(得分:0)
如果表达式求值为函数,则可以使用括号和参数列表调用该函数。
由于表达式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)
进行评估。
答案 1 :(得分:0)
让我们看一个更简单的currying示例:
...
.map(objToArray)
.do(console.log)
.subscribe();
如果你只用一个参数调用它,就像这样:
function add(x) {
return function (y) {
return x + y;
};
}
它将扩展为:
add(2);
期望function (y) {
return 2 + y;
}
参数(如果你调用它)。你可以这样运行:
y
或者更加简洁:
function (y) {
return 2 + y;
}(5)
每个函数只是在currying时扩展为一个新的匿名函数,所以即使它看起来很奇怪,一旦你扩展了代码,它就会开始变得有意义。