2017-05-30 19 views
-3

liftf(add)(1)で第2引数がどのように呼び出されますか?Currying - JavaScriptで2番目の引数を指定して関数を呼び出す方法

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

私はリフト(追加)がどのように呼び出されて保存されるのか理解しています。

関数が返される方法は混乱していますが、(1)で呼び出されます。

私は最初にIIFEと同じ原理で操作したが、それはそう思わない。 IFFEは(function(){}()v funciton(){}()となります。

「連鎖された」関数の引数が私を混乱させ、何が起こっているのか理解したい。

ありがとうございます!

+0

これは、値の後に '()'が実行することです。 –

+0

'add = first'、' 1 = second'です。 'liftf(add)'が関数であることを理解していれば、その関数を '1'で呼び出すことは奇跡ではないことを理解しておく必要があります。 – trincot

答えて

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)によって評価された関数に評価されます。

0

のは、カリー化の単純な例を見てみましょう:

function add(x) { 
    return function (y) { 
     return x + y; 
    }; 
} 

あなたがそうのような唯一の引数でそれを呼び出した場合:

function (y) { 
    return 2 + y; 
} 

add(2); 

それはに拡大します

y引数が必要です(呼び出した場合)。 succintcly

function (y) { 
    return 2 + y; 
}(5) 

以上:

add(2)(5); 

あなたが出て、コードを展開すると、カリー化と、各機能は、単に新しい無名関数に展開され、それは奇妙に見えるにもかかわらず、あなたはこのようにそれを実行することができますそれは意味をなさないでしょう。

関連する問題