我想知道这是否合法.我可以这样的东西:
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)
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)
所以,第二个参数funct是reference另一个函数(在这种情况下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)
如果要传递函数,只需按名称引用它而不使用括号:
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)
您希望它实现什么目标?看来您将函数声明与函数调用混淆了。
如果您想将另一个调用结果传递给函数,只需编写funct(some_array, foo(x)). 如果你想传递另一个函数本身,那么写funct(some_array, foo). 您甚至可以传递所谓的匿名函数funct(some_array, function(x) { ... })。