Пропуск параметров в функции обратного вызова
Функция обратного вызова, с которой я работаю, имеет следующую подпись (из 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];
})