Javascript - 将参数添加到作为参数传递的函数中

时间:2017-02-02 12:29:36

标签: javascript function parameter-passing

以下是我正在寻找的行为:

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

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

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

这种行为或类似的东西可以在javascript中完成吗?

7 个答案:

答案 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));