javascript - 一个函数(需要参数)作为另一个函数的参数

标签 javascript function

我一直使用函数作为参数。现在我需要传递一个函数 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/

相关文章:

javascript - 数据绑定(bind)在其他函数中不可用

javascript - 在 instagram API 中显示超过 20 张照片

javascript - 结合 JSON 和 GCAL 的 jQuery FullCalendar

javascript - 如何调用返回 block 中写入键值对的函数?

javascript - 结合 php 变量和 js 参数

ISO C89 中的函数调用计数

javascript - react : Rendering the component in different way

javascript - Angular2/4 在请求后填充表单

excel - 仅在打印机处于事件状态时使用注册表设置默认打印机 VBA

c - C语言递归声明函数