跳过回调函数中的参数

时间:2012-03-27 11:28:39

标签: javascript callback

我正在使用的回调函数具有以下签名(来自http://api.jquery.com/load/):

complete(responseText, textStatus, XMLHttpRequest)

现在,我只需要第三个参数。在Lua中有一个约定,其中使用下划线来跳过函数中不需要的返回值(跳过,因为_实际上将保存该值):

var1, _, _, var4 = func()

所以我想用JavaScript做类似的事情并设置我的函数签名:

function (_, _, XMLHttpRequest)

这种方法有什么问题,也许有更好/更清洁的方式?

3 个答案:

答案 0 :(得分:13)

这项技术并不漂亮,但我自己多次使用它。我想,给那些未使用的参数提供有意义的名称(只是为了避免混淆)仍然要好得多,但你可以使用下划线。

我经常看到它在jQuery相关的回调中使用,其中index经常作为第一个参数传入,如

$('.foo').each(function(_, node) {
});

因为大多数时候,你并不关心那里的索引。所以,为了回答你的实际问题,使用这种技术没有任何问题(可能会出现混乱),并且没有更好/更清晰的方法可以跳过不需要的参数。

答案 1 :(得分:2)

您正在使用两个具有相同名称的参数。你应该这样写:

function (_, __, myXhr)

答案 2 :(得分:1)

我承认使用_是一种常见的模式,它会省略需要的参数之前的参数。这对于一个参数(也许是2)很酷。

somethingWithACallback((_, whatIAmLookingFor) => { 
  // ...
})

但是我被困在第五位。这将使我不得不写

somethingWithACallback((_, __, ___, ____, whatIAmLookingFor) => { 
  // ...
})

对于这种情况,我建议采用以下模式:

somethingWithACallback((...args) => { 
  const whatIAmLookingFor = args[4];
})

通过销毁,您也可以这样做

somethingWithACallback((...args) => { 
  const [,,,,whatIAmLookingFor] = args;
})

并将其应用于多个参数

somethingWithACallback((...args) => { 
  const [,,,,whatIAmLookingFor,,andAnotherThing] = args;
})

从而从本质上选择所需的东西。