2017-05-30 66 views
-3

如何在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(){}()。

'链接'函数的参数混淆了我,我想了解发生了什么。

谢谢!

+0

这就是一个值后的'()' - 调用它。 –

+0

'add = first','1 = second'。如果你明白'liftf(add)'是一个函数,那么你应该明白用'1'调用这个函数并不是奇迹,因为这是函数的功能:被调用。 – trincot

回答

0

如果一个表达式求值为一个函数,那么可以用圆括号和参数列表调用该函数。

由于表达liftf(add)返回功能,请用小括号调用返回的功能与参数1liftf(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)评价。

0

让我们看讨好的一个简单的例子:

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); 

每个函数柯里时,所以即使它看起来奇怪,一旦你走出展开代码只是扩展到新的匿名功能,它将开始有意义。

相关问题