JavaScript: Передача вызовов функции, которые берут переменное количество аргументов [дубликат]

10
задан Alex Wayne 25 June 2010 в 17:20
поделиться

2 ответа

ОБНОВЛЕНИЕ: Начиная с ES6, вы можете использовать синтаксис spread для вызова функции, применяя элементы объекта iterable в качестве аргументов вызова функции:

function bar() {
  return foo(...arguments);
}

Обратите внимание, что вы также можете получать переменное количество аргументов в виде реального массива, вместо использования объекта arguments.

Например:

function sum(...args) { // args - это массив return args.reduce((total, num) => total + num) } function bar(...args) { return sum(...args) // это просто перенаправляет вызов, распространяя значения аргументов } console. log(bar(1, 2, 3)); // 6

Во времена ES3/ES5, чтобы правильно передать аргументы другой функции, нужно было использовать apply:

function bar() {
  return foo.apply(null, arguments);
}

Метод apply принимает два параметра, первый - thisObj, значение которого будет использоваться как значение this внутри вызываемой функции, если вы используете null или undefined, то значение this внутри функции будет ссылаться на глобальный объект, в нестрогом режиме, иначе будет undefined.

Второй аргумент, который ожидает apply - это объект типа массива, содержащий значения аргументов, которые будут применены к функции.

Посмотрите приведенный выше пример здесь.

21
ответ дан 3 December 2019 в 16:51
поделиться

Попробуйте это return foo.apply (this, arguments) . Также вы можете просто использовать Array.prototype.slice.apply (arguments) .join ('') для своей функции foo.

3
ответ дан 3 December 2019 в 16:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: