在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;});理想情况下,如果您使用的是函数式编程,那么您也可以保持函数的纯净。这意味着不会发生突变,相同的输入总是会产生相同的输出。这是单元测试的一个优势,您可以随时测量结果,并确保没有超出函数范围的内容受到影响。如果一个函数是另一个函数的输入,那么单元测试应该关注您正在测试的函数对您传入的函数做了什么。我想这就是你特别要问的。对吗?