【问题标题】:How to use 2 arguments in a 1-arg javascript function?如何在 1-arg javascript 函数中使用 2 个参数?
【发布时间】:2017-07-19 13:19:20
【问题描述】:

我正在使用 node.js 中的 http 模块来读取 url。 http.get 函数有this signature:

http.get(options[, callback])

回调函数采用单个参数 res。如果我想在回调中使用额外的对象/函数,我该怎么办?我可以考虑像这样内联 get 调用:

outerFunction = function(xyz) {
  http.get(options, (res) => {
    // do stuff with xyz here
    xyz(res.blah);
  }
});

但如果我的回调时间过长,我想在某处提前声明它:

myCallback = function(xyz) {
  return function(r) { xyz(r.blah); };
}

然后像这样调用 myCallback:

outerFunction = function(xyz) {
  http.get(options, (res) => {
    myCallback(xyz)(res);
  });
}

但这似乎超级笨拙,只能绕过 1-arg 回调限制。

有没有更好的方法?谢谢!

【问题讨论】:

  • 为什么myCallback返回一个函数而不是接收两个参数?
  • 如果你要返回一个函数,那么你可以这样做:http.get(options, myCallback(xyz))。但是,如果您只是要在箭头函数中调用 myCallback,那么它可能会同时接收两个参数:http.get(options, res => myCallback(xyz, res))

标签: javascript closures nested-function


【解决方案1】:

您可以使用arguments 对象。

arguments 对象是一个局部变量,可在所有 职能。您可以在函数中引用函数的参数 通过使用参数对象。此对象包含每个条目 传递给函数的参数,第一个条目的索引从 0.

快速示例:

function test1234(a){
    var args = arguments;
    console.log(args); // prints -> 0: "a", 1: "b"
}

test1234('a', 'b');

【讨论】:

    【解决方案2】:

    你可以使用这段代码,因为myCallback返回一个函数,然后http获取资源后,会自动将res传递给xyz。

    outerFunction = function(xyz) {
       http.get(options,myCallback(xyz));
    }
    

    【讨论】:

    • 谢谢!当我发布这个问题时,我的大脑冻结了。我有一个模糊的想法,我想形成一个闭包以传递给 http.get 的第二个参数,但是通过使用箭头函数调用这个闭包把它搞砸了。
    猜你喜欢
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 2022-11-11
    • 2011-07-12
    • 2022-12-25
    • 1970-01-01
    • 2015-10-26
    • 1970-01-01
    相关资源
    最近更新 更多