カリー化の原理をご存知ですか? JavaScript 関数のカリー化の原則と使用例

零下一度
リリース: 2017-04-21 09:58:43
オリジナル
1431 人が閲覧しました

この記事では、主に JavaScript 関数のカリー化の原理と使用法を紹介し、関数のカリー化の概念、原理、機能を分析し、関数のカリー化の具体的な使用スキルを例の形で提供します。必要な方は、以下を参照してください。この記事の例では、JavaScript 関数のカリー化の原理と使用法について説明します。以下のように、参考として皆さんと共有してください:

カリー化は、複数のパラメーターを受け入れる関数を、単一のパラメーター (アノテーション: 元の関数の最初のパラメーター If 他のパラメーター) を受け入れる関数に変換する変換プロセスです。が必要な場合、残りのパラメータを受け入れて結果を返す新しい関数が返されます。

つまり、一部のパラメーターを固定し、残りのパラメーターを受け入れる関数を返します。これは、部分計算関数とも呼ばれます。その目的は、適用範囲を絞り込み、よりターゲットを絞った関数を作成することです。

例えば、名前、性別、年齢を入力するだけで全員が自己紹介できる機能を作りたいと考えています。ただし、A がこの機能を使用すると、呼び出すたびに名前と性別を入力する必要があるため、実際には年齢だけが変更されます。そのため、A は名前と性別を入力した自分用の自己紹介関数を生成します。性別は固定パラメータです。

関連コードについてはgithubを確認してください。

function curry(fn){
  var args = Array.prototype.slice.call(arguments, 1);
  return function(){
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return fn.apply(null, finalArgs);
  };
}
function selfIntroduction(name, gender, age){
  console.log('hi, I am ' + name + ', ' + age +' years old ' + '. I am a ' + gender + '.');
}
var curriedSelfIntroduction = curry(selfIntroduction, 'A', 'man');
curriedSelfIntroduction('12');
curriedSelfIntroduction('13');
curriedSelfIntroduction('14');
ログイン後にコピー

実行後の結果。

もちろん、新しいスコープをバインドするカリー化された関数を書くこともできます。

function curry(fn, context){
  var args = Array.prototype.slice.call(arguments, 2);
  return function(){
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return fn.apply(context, finalArgs);
  };
}
ログイン後にコピー

関数のカリー化は素晴らしいですが、定義する関数のパラメーターの順序にも注意を払う必要があります。関数のカリー化により、複雑な機能をより小さく分析しやすい部分に分割することが可能になり、奨励されます。これらの小さな論理ユニットは明らかに理解しやすく、テストしやすいため、アプリケーションは小さなユニットをきれいに組み合わせたものになります。したがって、カリー化された関数を適切に使用できれば、JS コードがよりエレガントになります。

: ES6 (ES2015) のプロキシを確認することをお勧めします。これは、関数を前処理する別の方法です。

以上がカリー化の原理をご存知ですか? JavaScript 関数のカリー化の原則と使用例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!