ОБНОВЛЕНИЕ: Начиная с 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
- это объект типа массива, содержащий значения аргументов, которые будут применены к функции.
Посмотрите приведенный выше пример здесь.
Попробуйте это return foo.apply (this, arguments)
. Также вы можете просто использовать Array.prototype.slice.apply (arguments) .join ('')
для своей функции foo.