web-dev-qa-db-ja.com

Javascript-パラメーターとして渡された関数にパラメーターを追加します

これが私が探している振る舞いです:

function one(func){
   func(5);
}

function two(arg1, arg2){
   console.log(arg1);
   console.log(arg2);
}

one(two(3)) //prints 3, 5

この動作または同様の動作をjavascriptで実行できますか?

6
Adam Griffiths

いくつかの回避策が可能です

function one() {

  var args = Array.prototype.slice.call(arguments);
  var func = args[0];
  args.splice(0, 1);
  args.Push(5);
  func.apply(this, args);
}

function two(arg1, arg2) {
  console.log(arg1);
  console.log(arg2);
}

one(two, 3)
5
Nikhil Aggarwal

いつでもbind()関数を使用して、関数にいくつかの引数を渡すことができます。この例では、最初の引数-arg1-が3の値に等しい新しい関数を作成します。

function one(func){
   func(5);
}

function two(arg1, arg2){
   console.log(arg1);
   console.log(arg2);
}

one(two.bind(null, 3))

bind()関数の詳細については、こちらをご覧ください: MDN-Bind

6

構文に問題があります。functiononeは、単一の引数が関数であることを期待しています。次に、以下では、それを呼び出すときに、関数twoを渡していませんが、単一の引数、おそらくtwoを渡したときに返されるundefinedは何でも渡します。あなたが具体的に何を達成しようとしているのかわかりませんが、 閉鎖 について少し調査することをお勧めします。

2
MrFarberToYou

基本的に、関数でパラメーターを指定することはできません。指定しないと実行されます。関数別名one(two)を指定する必要がありますが、それは明らかに機能しません。

ただし、関数を動的に作成すると、次のようなタスクを実行できるはずです。

function one(func){
   func(5);
}

function two(arg1, arg2){
   console.log(arg1);
   console.log(arg2);
}

one(function(val) { two(3, val) }) //prints 3, 5
0
Vince
function one(arg){
   two(arg, 5); // func here is two so it requires two params...
}

function two(arg1, arg2){
   console.log(arg1);
   console.log(arg2);
}

one(3)// one expect function so can't execute function here!
0
challenger

どういうわけかこれは私のために働く

function one(func){
  console.log("one is running");
  func;
}

function two(args1, args2){
  console.log("two is running");
  console.log("args1 -> " + args1);
  console.log("args2 -> " + args2);
}

//to call it
args1 = 6;
args2 = 12
one(two(args1,args2));
0
Gerry Sihaj

oneが関数を引数として期待するとすぐにtwo(3)は関数を返すはずです。
この条件は必須ですしたがって、それを実現するには、two関数は次のようになります。

_function two(arg1){
    console.log(arg1);
        return function(arg2) {
        console.log(arg2);
    };
}
_

したがって、two(3)関数呼び出しは引数としてoneに渡されます
したがって、変数エンジンに値を割り当てる前にそれを実行します。そして、two(3)呼び出しログ_3_をコンソールに実行し、関数を返します

_   function(arg2) {
      console.log(arg2);
    };
_

次に、エンジンは実行された値(返された関数)をfunc変数に割り当てます。したがって、func関数のoneパラメータは次のようになります。

_func = function(arg2) {
    console.log(arg2);
 };
_

oneは、_5_を引数として渡してfuncを呼び出します。したがって、_5_はコンソールに記録されます。

0
devellopah