可変個引数のカリー化関数による値の増分加算
次のように動作する JavaScript 関数 sum を作成できますか?
sum(1)(2) = 3 sum(1)(2)(3) = 6 sum(1)(2)(3)(4) = 10
一言で言えば、関数は繰り返し渡すことによって合計を蓄積できるようにする必要があります。
当初、このような関数は JavaScript では不可能だと言われました。ただし、別のアプローチが登場しました。それは、sum 関数の前に符号を追加するというものです。
+sum(1)(2)(3)(4)
この符号を関数と組み合わせて使用すると、関数の戻り値が数値に強制されます。したがって、この場合、関数 sum は事実上、後続の呼び出しごとにインクリメントされる数値を返します。
望ましい動作を実現するには、sum 関数でカリー化手法を使用できます。実装は次のようになります。
function sum(n) { var v = function(x) { return sum(n + x); }; v.valueOf = v.toString = function() { return n; }; return v; } console.log(+sum(1)(2)(3)(4)); // Output: 10
この実装では、sum 関数を v 変数にラップし、それを返します。 v 関数を使用すると、n 変数に値を段階的に追加できます。演算子を使用して v を数値に強制すると、累積合計を取得できます。
この例では、console.log ステートメントは 1、2、3、4 の合計である 10 を出力します。
以上がカリー化された JavaScript 関数はどのようにして値を増分合計できるのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。