1. ホーム
  2. javascript

[解決済み] パラメータ付きの関数に参照を渡すにはどうしたらいいですか?重複

2023-02-23 21:51:08

質問

重複の可能性があります。

JavaScriptの関数呼び出しで引数を事前に設定するにはどうすればよいですか?(部分的な関数の適用)

私は、以下のことができるようにする必要があります。 与えられたパラメータを持つ関数への参照を渡す。 .

以下は、参照を渡す例です。 を使わずに パラメータ :

var f = function () {
    //Some logic here...
};

var fr = f; //Here I am passing a reference to function 'f', without parameters
fr(); //the 'f' function is invoked, without parameters

次に必要なのは、同じように f 関数を渡すことです。しかし、今回は参照にパラメータを渡す必要があります。 さて、無名関数でこれを行うことができます。 f 関数にパラメータを渡して呼び出すことができます。

var f = function () {
        //Some logic here...
    };

var fr = function (pars) {
    f(pars);
}; //Here I am creating an anonymous function, and invoking f inside it

fr({p : 'a parameter'}); //Invoking the fr function, that will later invoke the f function with parameters

しかし、私の疑問は への直接の参照を渡す方法はあるのでしょうか? f 関数への直接の参照を fr に、しかし無名関数で囲むことなく?

に割り当てる必要があるのは何ですか? fr に割り当てれば、パラメータなしで呼び出せるようになります ( fr() ) で、f(1,2,3) が実行されるようにします。 fr が呼び出されたときに実行されるのですか?

[UPDATE]を実行します。 私は ジェイソン・バンティング への回答 はこちら について 部分的な機能 で、彼がそこに投稿しているJavaScriptの関数は、まさに私が探していたものです。 以下はその解決策です。

function partial(func /*, 0..n args */) {
  var args = Array.prototype.slice.call(arguments).splice(1);
  return function() {
    var allArguments = args.concat(Array.prototype.slice.call(arguments));
    return func.apply(this, allArguments);
  };
}

どのように解決するのですか?

あなたが求めているものは 部分関数アプリケーション .

カレーとの微妙な違いを理解していない人に騙されてはいけません、彼らは の違いです。

部分的な関数適用で実装可能ですが をキュレーションします。以下は、引用です。 に関するブログ記事から引用します。 :

部分適用が関数を受け取り、そこからより少ない引数を受け取る関数を構築するのに対し、curryingはそれぞれが単一の引数を受け取る関数の合成により、複数の引数を受け取る関数を構築します。

これはすでに回答されています、あなたの答えのためにこの質問を参照してください。 どのように私はJavaScriptの関数呼び出しで引数を事前に設定することができますか?

例を挙げます。

var fr = partial(f, 1, 2, 3);

// now, when you invoke fr() it will invoke f(1,2,3)
fr();

繰り返しになりますが、詳しくはその質問をご覧ください。