JavaScriptの柯里化関数について話します.

3011 ワード

まず、避けられないのは経典を引用します.コリ化関数とは何ですか?
     コンピュータ科学では、コリック化は、複数のパラメータを受け取る関数を単一のパラメータ(最初の関数の最初のパラメータ)を受け入れる関数に変換し、残りのパラメータを受け入れて結果を返す新しい関数の技術である.この技術はChristpher Stracheyによって論理学者Haskell Curryによって命名されました.それはMoses SchenfinkelとGottlob Fregeによって発明されました.
1つ以上のパラメータが設定された関数を作成するには、関数と同様に結合されています.それらの違いは、関数が呼び出されたときに戻ってくる関数には、いくつかの着信パラメータを設定する必要があります.
  
function curry(fn){
            var args = Array.prototype.slice.call(arguments, 1);
            return function(){
                var innerArgs = Array.prototype.slice.call(arguments),
                    finalArgs = args.concat(innerArgs);
                return fn.apply(null, finalArgs);
            };
        }
対応する呼び出し:
function add(num1, num2){
            return num1 + num2;
        }
        
        var curriedAdd = curry(add, 5);
        alert(curriedAdd(3));   //8
 
   次に、上記のcurry関数を説明します.   まず、その形式のパラメーターに惑わされないでください.成功するかどうかは一つのパラメーターしかないですか?  もちろん、jsは可変パラメータをサポートしています.私たちはそのパラメータ形式を要求しません.最終的に使用者から送られてきたすべてのパラメータはargmentsを通じてアクセスできます.OK.まず最初の行を説明します.
var args = Array.prototype.slice.call(arguments, 1);
  この文を読む前提としては、call関数の呼び出しと、Arayオブジェクトのslice方法の熟知が必要です.ここでは負担がなくなり、読者は自分で調べられます.slice(1)を呼び出したら、最初の要素以外の後の要素の配列式に戻ります.同時に彼は调节者を直接argmentsを配列形式に変換する能力を備えています.ここでは関数のargmentsで呼び出されるsliceです.   公式のargmentsの定義は:
An argment is a value passed as input to a function.
  argumentsオブジェクトは本物のArrayではない.配列に似ていますが、行列に特有の属性と方法はありません.lengthを除いて.例えば、ポップアプローチがない.しかし、sliceを通じて配列に変換することができます.
ここの結果は、args=[5]     このとき、アークスは外部関数からの配列を保存します.
 
 
次に、匿名の関数を使用者に返しました.ここではクローズドが形成されています.クローズドバッグに慣れていない子供靴については、以前書いた文章を見てもいいです.http://www.cnblogs.com/Frank-C/p/4964999.html
この匿名関数を返してみます.次はクレイドAddを呼び出します.(3):私達は今この匿名関数に目を向けます.
return function(){
                var innerArgs = Array.prototype.slice.call(arguments),
                    finalArgs = args.concat(innerArgs);
                return fn.apply(null, finalArgs);
            };
再度sliceを呼び出して、注意してください.読者はこの時のargmentsと前の再匿名関数を外curry関数の内のargmentsと区別して、彼らの調合者と呼び出し方式は違いますよ.   ここでは、呼び出し側から伝わったパラメータを行列に変換します.  そして、私たちは二つの配列を連結します.  
---』-finalArgs=[5,3];
 
最後に、私達が直接呼び込んだ関数fn(curry関数を通して入ってきた)を使って最終的なadd方法を実現しました.ここではコール関数ではなく、appy関数を使っています.彼らの間の違いに関係しています.
 
   上のステップを通して簡単に説明します.まとめることができます.関数のカリー化とは、複数のパラメータを持つ関数を呼び出す前に、彼らの一部のパラメータを事前に導入し、後期の呼び出し時には残りの部分だけが伝えられます.