Стандартные соглашения для указания аргумента функции не используются в JavaScript

Существуют ли стандартные способы обозначения аргумента функции как неиспользуемого в JavaScript, аналогичного началу аргумента метода с подчеркиванием в Ruby?

Ответы

Ответ 1

Просто у нас есть пример для работы, это довольно часто встречается с jQuery $.each, где вы пишете код, который не нуждается в индексе, просто значение, в обратном вызове итерации ($.each назад относительно Array#forEach):

$.each(objectOrArrayLikeThing, function(_, value) { }
    // Use value here
});

Использование _ является самым близким, которое я видел стандартным способом сделать это, да, но я также видел много других — давая ему название, отражающее его назначение в любом случае (index), называя его unused и т.д.

Ответ 2

С браузерами, поддерживающими деструктуризацию, можно сделать:

function ({}, {}, value) {
  // console.log(value)
}

Это очень удобно, поскольку позволяет избежать проблемы с несколькими аргументами, имеющими одно и то же имя, а также не создает проблем с библиотеками, которые присваивают методы _ (lodash, подчеркивание и т.д.).

Одна из проблем этого подхода заключается в том, что неиспользуемые аргументы типа undefined или null будут выбрасываться.

Для undefined одним из решений является использование параметров по умолчанию:

function ({}={}, {}={}, value) {
  // console.log(value)
}

К сожалению, нет такого легко применяемого решения для null.

Ответ 3

Использование _ является стандартным, вероятно, учитывая, как многие разработчики JS также используют Ruby.

Обратите внимание, что в Ruby вы не используете имена переменных, начинающиеся с _, чтобы игнорировать параметры - поскольку они являются допустимыми именами переменных, но _ сам , который не является переменной, а черной дыройудаp > . def f(_, _, x) (игнорирование двух аргументов); def f(_a, _a, x) недействителен (два параметра имеют одно и то же имя); def f(_a, _b, x) puts _a, _b, x end; f(1, 2, 3) выводит все три числа.

Вы можете сделать то же самое в JavaScript с любой переменной - JavaScript не видит ничего неправильного в повторении имен параметров: function a(a, a, x) { return [a, x]; } является допустимым объявлением, а более поздние значения перезаписывают более ранние: a(1, 2, 3) возвращает [2, 3]. _ - это просто другое имя переменной в JavaScript, без специальной обработки.

EDIT: Спасибо Andrew Grimm за хорошую ссылку на _ в Ruby.

Ответ 4

Я бы порекомендовал этот синтаксис:

function(_index, value) {...}

не скрывать переменную lodash и по-прежнему иметь описание аргумента в случае его использования.

VS Code также правильно выделяет эти имена, и эти неиспользуемые аргументы не будут удалены после запаха кода автофиксации

Ответ 5

Как насчет использования объекта arguments function?

function third() { const [,,thirdArg] = arguments;
  return thirdArg;
}
console.log(third(1,2,3));