関数のカリー化は、注意事項を理解して

では詳細なJS関数カリー化あなたはカリー化実行ロジックを理解するために、このような例を見て、私は少し櫛です。

。1つの 機能追加(){
 2      // 最初の実行、すべてのパラメータを格納するように設計された配列の定義
3。     VARの _args = Array.prototype.slice.call(引数);
 4  
。5      // 関数宣言内の、 _argsを保存し、すべてのパラメータ値を収集閉鎖使用特性
。6      VARの _adder = 関数(){
 7          ; _args.push(...引数)
 。8          リターン_adder;
 9      ;}
 10  
11      // 暗黙的な変換ののtoStringを使用暗黙的な変換が最後に実行され、戻りの最終値算出機能、
12は      _adder.toString = 関数(){
 13は         リターン _args.reduce(関数(B){
 14              リターン A + B。
15          });
16      }
 17      リターン_adder。
18  }
 19  
20はconsole.log(追加(1)(2)(3).toString());

 (1)(2)(追加 3).toString() 実行する  追加の(1) このタイムコードがなっていると考えることができる  (2)(3).toString()_adder 1つの変数のみ_argsありながら、 1。そして、開始  (2)_adderを、それが正常に次のような方法が割り当てられている前に、_adder機能:

VaRの _adder = 関数(){ 
   _args.push(...引数)。
   リターン_adder。
}。

この方法により、絶えず_argsに新しいパラメータを渡し、最終的にすべての変数の要約の目的を達成します。

オーバーライドされたメソッド.toString、全ての変数は、最終的な出力を加算されます。

全体的に、カリー化関数の主な利点は、非常に素晴らしい、非常に地方のコードを探しています。しかし、それは閉鎖ですが、または.call、パフォーマンスは確かに単純な論理ではありません。しかし、どのくらいの差が個人的な感情の問題は、実際には、基本的には知覚できません。使用かどうか、状況に応じてプロジェクトを測定します。

おすすめ

転載: www.cnblogs.com/tinyTea/p/11105312.html