jsカリー化の例を詳しく解説

零下一度
零下一度オリジナル
2017-06-26 15:14:381529ブラウズ

1. 出典

コンピューターサイエンスにおいて、カリー化とは、複数のパラメーターを受け入れる関数を単一のパラメーター (元の関数の最初のパラメーター) を受け入れる関数に変換し、残りのパラメーターを受け入れる関数を返すことです。結果を返す新しい関数。この手法は、モーゼス シュンフィンケルとゴットロブ フレーゲによって発明されましたが、論理学者のハスケル カリーにちなんでクリストファー ストラチーによって命名されました。

2. curring(1)(2)(3)(4)() 結果を 10 にするためにパラメータを追加するにはどうすればよいですか?

1. 実際には、各パラメータを保持する方法を考えて、最終的に呼び出し時にパラメータを蓄積するだけで済みます。 これが私たちの考え方の焦点です。

function keepParams(){var arg = [];return function params(){if(arguments.length === 0){return arg;
    }
    Array.prototype.push.apply(arg,arguments);  //对apply方法不熟悉的可以去百度下return params;
}
}var curring = keepParams();
console.log(curring(1)(2)(3)(4)()); // [1, 2, 3, 4]

2. 最初のステップを通じて、次にやりたいことを何でも行うことができます。

加算を実装するにはどうすればよいですか?

3. 基本関数を変更します

function add(){var sum = 0,l = arguments.length;for(var i = 0; i < l; i++){
        sum += arguments[i];
    }return sum;
};function keepParams(fn){var arg = [];return function params(){if(arguments.length === 0){return fn.apply(this,arg);
        }
        Array.prototype.push.apply(arg,arguments);  //对apply方法不熟悉的可以去百度下return params;
    }
}var curring = keepParams(add);//console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 10

4. 加算の 3 番目のステップが実装されたので、乗算と除算を行います。一連の操作が完了するまで待ちます。ただし、同じメソッドを連続して 2 回呼び出す場合は、クロージャの使用に注意する必要があります。

引数はメモリに保存されます

console.log(curring(1)(2)(3)(4)()); // 10console.log(curring(1)(2,3,4)()); // 20

以上がjsカリー化の例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。