【问题标题】:Skipping parameters in callback function在回调函数中跳过参数
【发布时间】:2012-04-10 22:28:25
【问题描述】:

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

complete(responseText, textStatus, XMLHttpRequest)

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

var1, _, _, var4 = func()

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

function (_, _, XMLHttpRequest)

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

【问题讨论】:

  • 我认为[Skipping optional function parameters in JavaScript][1][1]中提供了更好的解决方案:stackoverflow.com/questions/8356227/…
  • @Mohsenme 这是一个不同的问题,它是关于将参数传递给函数的。这个是关于定义一个回调函数的。

标签: javascript callback


【解决方案1】:

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

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

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

因为大多数时候,您并不关心那里的索引。因此,要回答您的实际问题,使用该技术没有任何问题(可能除了混淆之外),并且没有更好/更清洁的方法来跳过不需要的参数。

【讨论】:

  • 是的,如果您打算使用 underscore.js 或 lodash,我会避免使用下划线。我自己也对此有所了解,因此最好使用其他占位符。
【解决方案2】:

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

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

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

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

对于这种情况,我提出了这种模式:

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

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

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

并将其应用于多个参数

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

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

【讨论】:

  • 该语法在 2012 年不可用,但很高兴您发布了这个答案。标记为已接受,这样未来的读者就不会意外使用过时的做法:)
【解决方案3】:

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

function (_, __, myXhr)

【讨论】:

  • 我没有使用这些参数的值,所以即使一个会被另一个覆盖,它们是否具有相同的名称也没关系。
  • 好的,所以你使用了正确的方法! _ 字符通常用于跳过参数或在多种语言中创建部分函数。
猜你喜欢
  • 1970-01-01
  • 2011-07-20
  • 2010-11-07
  • 2021-12-23
  • 2015-12-07
  • 2018-06-13
相关资源
最近更新 更多