Пропуск параметров в функции обратного вызова

Функция обратного вызова, с которой я работаю, имеет следующую подпись (из http://api.jquery.com/load/):

complete(responseText, textStatus, XMLHttpRequest)

Теперь мне нужен только третий параметр. В Lua существует соглашение, в котором подчеркивание используется для пропуска ненужных возвращаемых значений из функций (пропустите, потому что _ фактически сохранит значение):

var1, _, _, var4 = func()

Итак, я подумал о том, чтобы сделать аналогичную вещь с JavaScript и установить для нее свою сигнатуру:

function (_, _, XMLHttpRequest)

Есть ли что-то не так с этим подходом, возможно, есть лучший/более чистый способ?

Ответ 1

Техника некрасивая, но я использую ее сам в нескольких случаях. Я предполагаю, что все еще лучше давать эти неиспользуемые аргументы значимым именам (просто чтобы избежать путаницы), но вы отлично используете символы подчеркивания.

Я часто вижу, что он используется в связанных с jQuery обратных вызовах, где index часто передается как первый аргумент, например

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

потому что большую часть времени вам не нужен индекс. Поэтому, чтобы ответить на ваш реальный вопрос, нет ничего плохого в использовании техники (возможно, рядом с путаницей), и нет лучшего/чистого способа пропускать нежелательные аргументы.

Ответ 2

Вы используете два аргумента, имеющих одно и то же имя. Вы должны написать так:

function (_, __, myXhr)

Ответ 3

Я признаю, что использование _ является распространенным шаблоном для пропуска параметров, которые предшествуют тому, который вы хотите. Это круто для одного параметра, может быть, 2.

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

но я застрял, нуждаясь в 5-м. Это будет мед, я должен был бы написать

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

Для этого случая я предлагаю этот шаблон:

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