Вызвать функцию с заданным аргументом c по умолчанию в JavaScript? - PullRequest
1 голос
/ 05 августа 2020

Итак, у меня есть такая функция:

function foo(a, b, c=0, d=10, e=false) {
  // ...
}

Я хотел бы вызвать эту функцию с определенными c входами, но не обязательно перечислять их по порядку во входных данных. Например:

foo("bar", "skurr", e=true);

Я знаю, что в python вы можете вызывать функции таким образом, но, похоже, есть еще один метод, о котором я не знаю для js.

Я пробовал ввод объекта, но это не сработало, поскольку он просто использует объект в качестве первого параметра функции.

foo({a: "bar", b: "skurr", e: true});

Как мне вызывать функции таким образом в JavaScript?

1 Ответ

1 голос
/ 05 августа 2020

Один вариант использует «объект в качестве первого аргумента», как вы описали, но синтаксис немного странный. Рассмотрим:

function foo({a, b=0}) { console.log(a,b); }

Это определяет функцию, которая требует объект в качестве первого аргумента, и накладывает структурные ограничения на этот объект. В частности, будет работать следующее:

foo({a:1});            // output: 1 0
foo({a:1, b:2});       // output: 1 2
foo({});               // output: undefined 0
foo({a:1, b:2, c: 3}); // output: 1 2 /* c is ignored */

Хотя следующее приведет к ошибке:

foo(); // TypeError: Cannot destructure property `a` of 'undefined' or 'null'

Другой вариант, который вы часто видите, является идиомой форма:

function foo(some_object) { let {a,b} = some_object; console.log(a,b); }

Оба они являются экземплярами деструктуризации . Насколько я знаю, это наиболее близкий к python -подобный синтаксис (этот ответ дает, возможно, более подробное изложение, и я даю, возможно, слишком тщательный анализ формального языка, который объясняет наблюдаемые эффекты Объект деструктуризации ES6 значение по умолчанию для параметра функции назначения )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...