以下是我正在寻找的行为:
function one(func){
func(5);
}
function two(arg1, arg2){
console.log(arg1);
console.log(arg2);
}
one(two(3)) //prints 3, 5
这种行为或类似的东西可以在javascript中完成吗?
答案 0 :(得分:5)
可能有一些解决方法
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)
答案 1 :(得分:5)
您始终可以使用 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
答案 2 :(得分:2)
你的语法有问题:函数one
期望它的单个参数是一个函数。然后,在下面,当你调用它时,你没有传递函数two
,但是当two
传递一个参数时返回undefined
,可能是{{1}}。我不知道你特别想要完成什么,但我建议对closures进行一些研究。
答案 3 :(得分:0)
只要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
调用func
并将5
作为参数传入。
所以5
会被记录到控制台。
答案 4 :(得分:0)
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!
答案 5 :(得分:0)
基本上你不能在函数中指定参数或者它会运行。你需要指定一个(两个)函数,但这显然不会起作用。
但是,如果你动态创建一个函数,你应该能够完成这样的任务:
function one(func){
func(5);
}
function two(arg1, arg2){
console.log(arg1);
console.log(arg2);
}
one(function(val) { two(3, val) }) //prints 3, 5
答案 6 :(得分:0)
好吧,这东西对我有用
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));