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

时间:2011-04-22 03:34:18

标签: javascript

我想知道这是否合法。我可以有类似的东西:

function funct(a, foo(x)) {
  ...
}

其中a是一个数组而x是另一个名为foo的函数的整数参数?

(我的想法是让一个函数在数组中使用for循环,并在数组中的每个元素的params中调用该函数。这个想法就是在不同的函数上调用它,这样两个数组的元素就会成倍增加然后将总和加在一起。例如A[0] * B[0] + A[1] * B[1]。)

7 个答案:

答案 0 :(得分:42)

我认为这就是你的意思。

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

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

}

答案 1 :(得分:24)

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

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

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

//call funct
funct('world!', foodemo); //=> 'hello world!'

因此,funct的第二个参数是reference到另一个函数(在本例中为foodemo)。一旦调用该函数,它就会执行其他函数(在这种情况下使用第一个参数作为输入)。

函数声明中的参数只是标签。它是赋予它们意义的功能体。在此示例中,如果未提供第二个参数,funct将失败。因此检查可能如下:

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

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

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

funct2(foodemo('world!')); //=> 'hello world!'

答案 2 :(得分:7)

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

function funct(a, foo) {
   ...
}

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

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

如果您愿意,还可以使用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"]); 

答案 3 :(得分:2)

我宁愿建议创建如下变量:

var deleteAction = function () { removeABC(); };

并将其作为参数传递如下:

removeETC(deleteAction);

在removeETC方法中执行如下所示:

function removeETC(delAction){ delAction(); }

答案 4 :(得分:2)

你提到的是合法的。在此处,foo(X)将被调用,其返回值将作为funct()方法的参数

答案 5 :(得分:1)

你想要它实现什么?看起来你把函数声明与函数调用混合在一起。

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

答案 6 :(得分:-1)

事实上,似乎有点复杂,不是。

将方法作为参数:

 function JS_method(_callBack) { 

           _callBack("called");  

        }

您可以提供参数方法:

    JS_method(function (d) {
           //Finally this will work.
           alert(d)
    });