これが私が探している振る舞いです:
function one(func){
func(5);
}
function two(arg1, arg2){
console.log(arg1);
console.log(arg2);
}
one(two(3)) //prints 3, 5
この動作または同様の動作をjavascriptで実行できますか?
いくつかの回避策が可能です
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)
いつでも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
構文に問題があります。functionone
は、単一の引数が関数であることを期待しています。次に、以下では、それを呼び出すときに、関数two
を渡していませんが、単一の引数、おそらくtwo
を渡したときに返されるundefined
は何でも渡します。あなたが具体的に何を達成しようとしているのかわかりませんが、 閉鎖 について少し調査することをお勧めします。
基本的に、関数でパラメーターを指定することはできません。指定しないと実行されます。関数別名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
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!
どういうわけかこれは私のために働く
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));
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
_はコンソールに記録されます。