理解javascript函数调用

理解javascript函数调用,javascript,Javascript,仍在学习javascript。下面的代码是如何工作的? 调用main(params)是否意味着它在引擎盖下调用dowork(callbackXYZ,options,params) 不 dowork是返回另一个函数的函数 另一个函数被分配给const main 然后调用这个main(返回promise的函数) 您也可以在不声明任何内容的情况下运行此代码: 。。。 等待工作(回调XYZ,选项)(参数); 下面是一个简化的代码示例。它删除了异步内容,因为不需要理解它 //您提供给`dowork'

仍在学习javascript。下面的代码是如何工作的? 调用
main(params)
是否意味着它在引擎盖下调用
dowork(callbackXYZ,options,params)

  • dowork
    是返回另一个函数的函数
  • 另一个函数被分配给
    const main
  • 然后调用这个main(返回promise的函数)
您也可以在不声明任何内容的情况下运行此代码:

。。。
等待工作(回调XYZ,选项)(参数);

下面是一个简化的代码示例。它删除了异步内容,因为不需要理解它

//您提供给`dowork'的回调`
//'dowork'的内部将使用给定的参数调用它
函数callbackXYZ(src、tgt、params){
log(“src是:”,src);
log(“tgt是:”,tgt);
log(“参数为:”,params);
}
//您为“dowork”提供的选项`
var选项={src:“foo”,tgt:“bar”};
//调用“dowork”将接收回调和选项,并返回
//一个可以访问这两个参数的新函数。
const main=dowork(callbackXYZ,选项);
//为返回函数提供的参数
const params={my:“params”};
//调用返回的函数
主要(参数);
//这是“嫁妆”。它接收您的回调和选项,并且
//返回一个新函数,该函数希望您将其传递给params。
//因此,返回的函数引用了回调函数、选项
//和params。
//返回函数的主体只调用回调函数并
//从您提供的选项和参数向其传递数据
函数dowork(回调、选项){
返回函数(params){
回调(opts.src、opts.tgt、params);
}

}
dowork
可能返回一个
函数,您可以使用
参数调用该函数。无法从代码片段中判断
doworks
返回的函数内部发生了什么。这取决于
某些库中的内容
dowork()
对所有这些参数的作用取决于库的设计。感谢@slappy的详细解释。知道了。这是一种常见的javascript模式吗?您立即(正确地)认识到,
dowork(…)
正在返回函数。@gkucmierz@slappy在我看来,这似乎是一种提供灵活性的方法。i、 e调用方可以编写自己的
callbackXYZ
并且
dowork()
可以调用它。这是显而易见的。但是
dowork()
返回一个函数,然后调用该函数似乎是额外的跳跃。是的,传递函数(包括返回函数)是很常见的。因为函数将“记住”创建它们的原始变量范围(它们创建一个闭包),所以它们可以方便地将一些数据与一个连续使用该数据的函数相关联。
const { dowork } = require('some_lib');

async function callbackXYZ(src, tgt, params) => {
    // ...logic
}
const main = dowork(callbackXYZ, options);
await main(params);