我一直使用函数作为参数。现在我需要传递一个函数 A,它需要函数 B 生成的参数 x。我也可以这样做。通过使用参数在 B 中调用 A。
但我的问题是,我的函数 B 接受任何类型的函数,并且它不是固定的。它可能采用需要参数 y 的函数 C 或不需要任何参数的某个函数 D。
这可能吗?
function B(done_function){
//some task generate some value
done_function();
}
function B(done_function){
//some task generate some value including args
done_function(args);
}
如何使 A、C 和 D 函数使用它们的参数执行。
上面的两个例子不起作用。
最佳答案
处理这个问题的正常方法是忽略它。函数 B 应该不关心其他函数如何接受参数。相反,它应该仅为其回调提供标准且记录良好的接口(interface):
function B (done_function) {
// do some stuff to generate result
done_function(result);
}
或者,如果函数 B
可能会异步生成错误,那么它应该执行 done_function(err, result)
。请注意,所有库都这样做。他们不关心你如何编写函数。
现在,如何将各种类型的函数传递给B
?只需将它们包裹在另一个函数中即可。例如,假设您需要将 B
的结果传递给记录器函数,并且需要传递一个指定要记录的文件名称的变量。只需这样做:
B(function(result) {
logToFile(debugLogFile, result);
});
例如,您需要修改结果,因为您希望传递结果的函数期望其采用特定格式。只需做这样的事情:
B(function(result) {
var x = {
some_parameter: something,
result: result
};
doSomethingElse(x);
});
在任何情况下,函数 B
都不需要知道您希望如何处理它生成的结果。作为程序员,您负责在进行进一步处理之前适本地转换函数 B
的结果。
关于javascript - 一个函数(需要参数)作为另一个函数的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43225367/