我正在使用的回调函数具有以下签名(来自http://api.jquery.com/load/):
complete(responseText, textStatus, XMLHttpRequest)
现在,我只需要第三个参数。在Lua中有一个约定,其中使用下划线来跳过函数中不需要的返回值(跳过,因为_实际上将保存该值):
var1, _, _, var4 = func()
所以我想用JavaScript做类似的事情并设置我的函数签名:
function (_, _, XMLHttpRequest)
这种方法有什么问题,也许有更好/更清洁的方式?
答案 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;
})
从而从本质上选择所需的东西。