@dch3

Как вызвать функцию с «именованными аргументами» в JS?

Обьявлена функция
function func (a, b, c, d) {
   ...
}


При вызове этой функции с меньшим кол-вом параметров нежели аргументов при обьявлении, например
func(1, 2) в переменную "a" будет скопировано значение 1, а в переменную "b" значение 2.
Значения копируются в аргументы по порядку.

Как можно сделать так, что бы при все том же вызове func(1, 2) значение 2 было скопировано не в переменную "b", а например в "d"? Т.е. в этом случае она будет вызываться с двумя аргументами, только значения копируются не по порядку.
  • Вопрос задан
  • 85 просмотров
Решения вопроса 2
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
В целом - ответ "никак". Потому что так делать не надо. Это не очевидно. Код с душком.

Но если очень хочется, то такие варианты:
1) Нормальный вариант (даже без душка):
func(1, undefined, undefined, 2)
2) Нормальный вариант - объявлять не переменные, а объект на вход c деструктуризацией его свойств:
function func({ a, b, c, d }) {
  return a+d
}
func({ a: 1, d: 2 });

То есть это сокращённый вариант от такого:
function func(data) {
  return data.a+data.d
}
func({ a: 1, d: 2 });

3) Грязный вариант - создать новую функцию с забинжеными аргументами:
function func(a,b,c,d) { return a+d }
var badFunc = (a,d) => func.bind(null, a, undefined, undefined, d)();
badFunc(1,2)
Ответ написан
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
function foo({ a, b, c, d }) {
  console.log(a, b, c, d);
}
foo({ a: 5, d: 3 });
// 5 undefined undefined 3
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы