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

在javascript函数中作为参数传递函数,javascript,Javascript,我想知道这样做是否合法。能给我一些类似于: function funct(a, foo(x)) { ... } 其中,a是一个数组,x是另一个名为foo的函数的整数参数 (想法是让一个函数在数组中使用for循环,并在参数中为数组中的每个元素调用该函数。想法是在不同的函数中调用该函数,使两个数组的元素相乘,然后相加。例如a[0]*B[0]+a[1]*B[1])您希望它实现什么?看起来你把函数声明和函数调用搞混了 如果要将另一个调用结果传递给函数,只需编写funct(some_数组,foo(x

我想知道这样做是否合法。能给我一些类似于:

function funct(a, foo(x)) {
  ...
}
其中,
a
是一个数组,
x
是另一个名为
foo
的函数的整数参数


(想法是让一个函数在数组中使用for循环,并在参数中为数组中的每个元素调用该函数。想法是在不同的函数中调用该函数,使两个数组的元素相乘,然后相加。例如
a[0]*B[0]+a[1]*B[1]
)您希望它实现什么?看起来你把函数声明和函数调用搞混了


如果要将另一个调用结果传递给函数,只需编写
funct(some_数组,foo(x))
。如果要传递另一个函数本身,请编写
funct(some\u array,foo)
。你甚至可以传递一个所谓的匿名函数
funct(一些数组,函数(x){…})
,我想这就是你的意思

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

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

}

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

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

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

//call funct
funct('world!', foodemo); //=> 'hello world!'
因此,
funct
的第二个参数是对另一个函数的
引用(在本例中为
foodemo
)。调用该函数后,它将执行另一个函数(在本例中,使用第一个参数作为输入)

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

function funct(a, foo) {
  if (a && foo && typeof a === 'string' && typeof foo === 'function'){
    alert(foo(a));
  } else {
    return false;
  }
}
由于JS的性质,您可以在函数调用中使用直接函数调用作为参数(使用正确的函数定义):


我建议创建如下变量:

var deleteAction = function () { removeABC(); };
removeETC(deleteAction);
function removeETC(delAction){ delAction(); }
并将其作为参数传递,如下所示:

var deleteAction = function () { removeABC(); };
removeETC(deleteAction);
function removeETC(delAction){ delAction(); }
在removeETC方法中,执行如下操作:

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

你提到的是合法的。在这里,
foo(X)
将被调用,其返回值将作为
funct()
方法的一个参数。如果要传递函数,只需按名称引用它,不带括号:

function funct(a, foo) {
   ...
}
但有时您可能希望传递包含参数的函数,但在调用回调之前不调用它。为此,在调用它时,只需将其包装在匿名函数中,如下所示:

funct(a, function(){foo(x)});
若您愿意,还可以使用该函数并使用第三个参数,即参数数组,如:

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

其实,似乎有点复杂,不是

获取方法作为参数:

 function JS_method(_callBack) { 

           _callBack("called");  

        }
您可以作为参数方法给出:

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

其思想是让一个函数在数组中使用for循环,并在params中为数组中的每个元素调用该函数。其思想是在不同的函数上调用此函数,使两个数组的元素相乘,然后将和相加。例如A[0]*B[0]+A[1]*B[1]@Spence,那么我认为您在Sergei的回答中对这种用例有一个很好的建议。他声明了
funct
,该函数将函数作为第二个参数,然后使用它对第一个参数进行操作。第一行显示了一个调用示例,其中一个匿名函数作为第二个参数传递给
funct
。+1这是正确的答案,但可以使用一个小细节。在JavaScript中,您可以将函数作为参数传递给另一个函数(或将其分配给变量等),但只需通过其名称引用它,而不使用括号,如
var func=foo
func(bar)
(其中
foo
bar
是函数)。如果改为使用括号按名称调用函数,如
var value=foo()
func(bar())
,则您正在执行该函数,函数的结果将分配给变量或传递给函数,我整理了答案并添加了评论,所以应该更清楚地知道是什么。如果运行
console.log(a+,'+typeof foo))
它将记录
z,function
。此外,要执行该函数
foo
请像调用任何其他函数一样调用它,但作为指定的参数名:
foo()因此不需要
eval()
:-)@Sergei Golos-嗨,我只是想知道我们如何测试这些类型的函数,即funct(“z”,function(x){return x;});理想情况下,如果您使用的是函数式编程,那么您也可以保持函数的纯净。这意味着不会发生突变,相同的输入总是会产生相同的输出。这是单元测试的一个优势,您可以随时测量结果,并确保没有超出函数范围的内容受到影响。如果一个函数是另一个函数的输入,那么单元测试应该关注您正在测试的函数对您传入的函数做了什么。我想这就是你特别要问的。对吗?