Создание функции композиции

compose выполняет функции справа налево. Самая правая получает все аргументы вызова, остальные — по одному результату предыдущего шага.

Короткий ответ

Что ответить на собеседовании

compose выполняет функции справа налево. Самая правая получает все аргументы вызова, остальные — по одному результату предыдущего шага.

Подробный разбор

Ответ с пояснениями

Условие

Напишите функцию compose, принимающую произвольное количество функций и возвращающую их композицию. Функция должна корректно работать как с единственной функцией‑аргументом, так и с несколькими, передавая все полученные параметры в первую функцию цепочки.

const square = (x) => x * x;
const times2 = (x) => x * 2;
const sum = (a, b) => a + b;

console.log(compose(square, times2)(2) === square(times2(2)));
console.log(compose(square, times2, sum)(3, 4) === square(times2(sum(3, 4))));

Ответ

compose выполняет функции справа налево. Самая правая получает все аргументы вызова, остальные — по одному результату предыдущего шага.

function compose(...functions) {
  return function (...args) {
    if (!functions.length) return args[0];
    let value = functions[functions.length - 1].apply(this, args);
    for (let i = functions.length - 2; i >= 0; i--) {
      value = functions[i].call(this, value);
    }
    return value;
  };
}

Оба сравнения из условия дадут true. При единственной функции сохраняются все аргументы; для пустого набора выбран identity по первому аргументу. Это синхронная композиция: Promise автоматически не ожидается, а исключение останавливает цепочку.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее