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

10

我需要的行为如下:

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

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

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

这种行为或类似的行为能够在javascript中实现吗?


从代码中无法理解函数的目的。如果您能用语言解释一下,那就更好了。 - jaibatrik
没有特定目的,这些是简化的示例,旨在说明我所寻找的内容,而不包含不必要的细节。 - Adam Griffiths
1
我认为@MrFarberToYou的回答也总结了我的想法。 - jaibatrik
那种行为是不可能的;你只传递了一个参数给 two,却立即尝试记录两个参数的值,其中至少有一个不存在。 - deceze
7个回答

10

您始终可以使用 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


7
一些解决方法是可行的。

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)


2

你的语法有问题:函数 one 需要一个函数作为它的单个参数。然后,在下面当你调用它时,你没有传递函数 two,而是传递了任何当给two一个参数时返回的值,可能是undefined。我不知道你具体想做什么,但我建议研究一下闭包


如果two(3)调用返回一个函数,则one将接收函数作为参数。 - devellopah

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


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变量。 因此,one函数的func参数现在看起来像这样:

func = function(arg2) {
    console.log(arg2);
 };

one 调用 func 并将 5 作为参数传递。 因此,在控制台中记录了 5


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!

不是我想要的,这个想法是函数在调用之前不知道要传递什么第一个参数。 - Adam Griffiths

0

基本上你不能在函数中指定参数,否则它会运行。你需要指定函数,也就是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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接