我需要的行为如下:
function one(func){
func(5);
}
function two(arg1, arg2){
console.log(arg1);
console.log(arg2);
}
one(two(3)) //prints 3, 5
这种行为或类似的行为能够在javascript中实现吗?
我需要的行为如下:
function one(func){
func(5);
}
function two(arg1, arg2){
console.log(arg1);
console.log(arg2);
}
one(two(3)) //prints 3, 5
这种行为或类似的行为能够在javascript中实现吗?
您始终可以使用 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
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)
你的语法有问题:函数 one
需要一个函数作为它的单个参数。然后,在下面当你调用它时,你没有传递函数 two
,而是传递了任何当给two
一个参数时返回的值,可能是undefined
。我不知道你具体想做什么,但我建议研究一下闭包。
two(3)
调用返回一个函数,则one
将接收函数作为参数。 - devellopah一些奇怪的东西对我来说确实起作用了
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
变量。
因此,one
函数的func
参数现在看起来像这样:
func = function(arg2) {
console.log(arg2);
};
one
调用 func
并将 5
作为参数传递。
因此,在控制台中记录了 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!
基本上你不能在函数中指定参数,否则它会运行。你需要指定函数,也就是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
two
,却立即尝试记录两个参数的值,其中至少有一个不存在。 - deceze