在javascript函数中将函数作为参数传递

Spe*_*nce 33 javascript

我想知道这是否合法.我可以这样的东西:

function funct(a, foo(x)) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

where a是一个数组,x是另一个函数的整数参数foo

(我的想法是让一个函数在数组中使用for循环,并在数组中的每个元素的params中调用该函数.这个想法是在不同函数上调用它,因此两个数组的元素相乘,然后总和加在一起.例如A[0] * B[0] + A[1] * B[1].)

Ser*_*los 42

我想这就是你的意思.

funct("z", function (x) { return x; });

function funct(a, foo){
   foo(a) // this will return a

}
Run Code Online (Sandbox Code Playgroud)

  • +1这是正确的答案,但可以使用litle详细说明.在JavaScript中,您可以将函数作为参数传递给另一个函数(或将其分配给变量等),但只是通过其名称引用它而没有括号,如`var func = foo`或`func(bar) `(其中`foo`和`bar`是函数).如果您改为使用**括号调用函数**,如`var value = foo()`或`func(bar())`,那么您正在执行该函数,函数的结果将被赋值给变量或分别传递给函数. (23认同)

Koo*_*Inc 24

这不是用另一个函数声明函数作为其参数之一的方法.这是:

function foodemo(value){
  return 'hello '+ value;
}

function funct(a, foo) {
  alert(foo(a));
}

//call funct
funct('world!', foodemo); //=> 'hello world!'
Run Code Online (Sandbox Code Playgroud)

所以,第二个参数functreference另一个函数(在这种情况下foodemo).一旦调用该函数,它就会执行其他函数(在这种情况下使用第一个参数作为输入).

函数声明中的参数只是标签.它是赋予它们意义的功能体.funct如果未提供第二个参数,则此示例将失败.所以检查它可能看起来像:

function funct(a, foo) {
  if (a && foo && typeof a === 'string' && typeof foo === 'function'){
    alert(foo(a));
  } else {
    return false;
  }
}
Run Code Online (Sandbox Code Playgroud)

由于JS的性质,您可以在函数调用中使用直接函数调用作为参数(使用正确的函数定义):

function funct2(foo){
  alert(foo);
}

funct2(foodemo('world!')); //=> 'hello world!'
Run Code Online (Sandbox Code Playgroud)


dal*_*lin 7

如果要传递函数,只需按名称引用它而不使用括号:

function funct(a, foo) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

但有时您可能希望传递包含参数的函数,但在调用回调之前不要调用它.要做到这一点,在调用它时,只需将其包装在匿名函数中,如下所示:

funct(a, function(){foo(x)});
Run Code Online (Sandbox Code Playgroud)

如果您愿意,还可以使用apply函数并使用第三个参数作为参数数组,如下所示:

function myFunc(myArray, callback, args)
{
    //do stuff with myArray
    //...
    //execute callback when finished
    callback.apply(this, args);
}

function eat(food1, food2)
{
    alert("I like to eat " + food1 + " and " + food2 );
}

//will alert "I like to eat pickles and peanut butter"
myFunc([], eat, ["pickles", "peanut butter"]); 
Run Code Online (Sandbox Code Playgroud)


jul*_*icz 2

您希望它实现什么目标?看来您将函数声明与函数调用混淆了。

如果您想将另一个调用结果传递给函数,只需编写funct(some_array, foo(x)). 如果你想传递另一个函数本身,那么写funct(some_array, foo). 您甚至可以传递所谓的匿名函数funct(some_array, function(x) { ... })