では詳細な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、パフォーマンスは確かに単純な論理ではありません。しかし、どのくらいの差が個人的な感情の問題は、実際には、基本的には知覚できません。使用かどうか、状況に応じてプロジェクトを測定します。