我想知道这是否合法。我可以有类似的东西:
function funct(a, foo(x)) {
...
}
其中a
是一个数组而x
是另一个名为foo
的函数的整数参数?
(我的想法是让一个函数在数组中使用for循环,并在数组中的每个元素的params中调用该函数。这个想法就是在不同的函数上调用它,这样两个数组的元素就会成倍增加然后将总和加在一起。例如A[0] * B[0] + A[1] * B[1]
。)
答案 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)
});