跳过回调函数中的参数

use*_*702 18 javascript callback

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

complete(responseText, textStatus, XMLHttpRequest)
Run Code Online (Sandbox Code Playgroud)

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

var1, _, _, var4 = func()
Run Code Online (Sandbox Code Playgroud)

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

function (_, _, XMLHttpRequest)
Run Code Online (Sandbox Code Playgroud)

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

jAn*_*ndy 13

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

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

$('.foo').each(function(_, node) {
});
Run Code Online (Sandbox Code Playgroud)

因为大多数时候,你并不关心那里的指数.所以为了回答你的实际问题,使用这种技术没有什么不对(可能是混乱)并且没有更好/更清晰的方法来跳过不需要的参数.

  • 是的,如果您打算使用underscore.js或lodash,我会避免使用下划线.我自己也有点喜欢使用其他占位符. (3认同)

Luk*_*kas 12

我承认使用_是一种常见的模式,可以省略在您想要的参数前面添加的参数。对于一个参数来说这很酷,也许是 2 个参数。

somethingWithACallback((_, whatIAmLookingFor) => { 
  // ...
})
Run Code Online (Sandbox Code Playgroud)

但我被困住了,需要第五个。这意味着我必须写

somethingWithACallback((_, __, ___, ____, whatIAmLookingFor) => { 
  // ...
})
Run Code Online (Sandbox Code Playgroud)

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

somethingWithACallback((...args) => { 
  const whatIAmLookingFor = args[4];
})
Run Code Online (Sandbox Code Playgroud)

通过解构,你也可以这样做

somethingWithACallback((...args) => { 
  const [,,,,whatIAmLookingFor] = args;
})
Run Code Online (Sandbox Code Playgroud)

并将其应用于多个参数

somethingWithACallback((...args) => { 
  const [,,,,whatIAmLookingFor,,andAnotherThing] = args;
})
Run Code Online (Sandbox Code Playgroud)

从而基本上选择您需要的东西。