Нужно сделать функцию, которая принимает две функции (простые мат.операции), объединяет их в одну и возвращает её. Одна из входящих функций может принимать некоторое количество аргументов. А результирующая функция должна иметь возможность принимать аргументы, чтобы направлять их на вход этой вложенной.
function funcGen(func1, func2) {
return function(/*возможные аргументы*/) {
return func1(func2(/*возможные аргументы*/))
}}
Я знаю о псевдомассиве arguments
, но не понимаю, как передать его элементы на вход func2
. Я бы передал их массивом, но тогда func2
должна быть заранее к этому готова, а такого условия нет в задаче.
Вы, вероятно, хотите что-то такого рода?:
function pow2(a) {
return a * a;
}
function sum() {
var sum = 0;
for (var i = 0; i < arguments.length; ++i) {
sum += arguments[i];
}
return sum;
}
function collapseFunctions(f1, f2) {
return function() {
return f1(f2.apply(this, arguments));
}
}
console.log(collapseFunctions(pow2, sum)(1, 2, 3));
Функция f1
принимает 1 параметр, я сделал функцию, которая принимает 1 аргумент и возводит его в квадрат - pow2
.
Функция f2
принимает любое количество параметров, в данном случае я сделал функцию, которая считает сумму всех переданных параметров.
Функция collapseFunctions
принимает f1
и f2
, вызывает f2
и передает результат ее работы как аргумент для f1
. Потом все, что насчитала f1
, возвращается вам.
Для анонимной функции внутри collapseFunction
я не объявлял параметры, ибо они берутся из arguments
. Чтобы пробросить псевдомассив arguments
в функцию f2
, я использую функцию apply
.
Как-то так. Надеюсь, что понял, что вы хотите.
ДОПОЛНЕНИЕ
Функция f2
в моем примере не обязательно должна работать с псевдомассивом arguments
. Она может явно объявлять нужные ей параметры. Они будут доставлены ей в любом случае. Например, пусть берет лишь два параметра - a
и b
:
function pow2(a) {
return a * a;
}
function sum(a, b) {
return a + b;
}
function collapseFunctions(f1, f2) {
return function() {
return f1(f2.apply(this, arguments));
}
}
console.log(collapseFunctions(pow2, sum)(1, 2));
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
PhpStorm не знает переменную currentScript — «Unresolved variable currentScript»Как сделать так, чтобы он знал ее и не выдавал Warning'ов? Вот скриншот:
Шлём запрос, полученный обработчик срабатывает после получения ответа:
Есть функция, которая генерирует квадрат рандомного размера не больше 40px в рандомном месте, не выходя за границы canvas: 1Как сделать минимальный...