Есть такая задача(вот тут):
Напиши функцию partial(fn, a1, a2, ....), которая позволяет зафиксировать один или несколько аргументов функции. Пример:
function add(a, b) { return a + b; }
function mult(a, b, c, d) { return a * b * c * d; }
var add5 = partial(add, 5); // Мы получили функцию с 1 аргументом, которая прибавляет к любому числу 5
console.log(add5(2)); // 7
console.log(add5(10)); // 15
console.log(add5(8)); // 13
var mult23 = partial(mult, 2, 3); // мы зафиксировали первые 2 аргумента mult() как 2 и 3
console.log(mult23(4, 5)); // 2*3*4*5 = 120
console.log(mult23(1, 1)); // 2*3*1*1 = 6
подскажите, как это делается. как вернуть функцию с уже вписанными аргументами?
Первое, что должна делать функция partial
- это возвращать функцию.
function partial(fn, ...partialArgs){
return function(...args){
...
}
}
внутри этой функции должна вызываться функция fn
, которой должны передаваться аргументы partialArgs
, а также аргументы args, которые передадут непосредственно при вызове.
Для вызова функции с неизвестным заранее количеством параметров нужно использовать метод apply
fn.apply(this,partialArgs.concat(args));
Так как apply принимает только одну коллекцию параметров, объединим массивы аргументов с помощью метода concat
Пример:
function partial(fn, ...partialArgs) {
return function(...args) {
return fn.apply(this, partialArgs.concat(args));
}
}
function add(a, b) {
return a + b;
}
function mult(a, b, c, d) {
return a * b * c * d;
}
var add5 = partial(add, 5); // Мы получили функцию с 1 аргументом,
console.log(add5(2)); // 7
console.log(add5(10)); // 15
console.log(add5(8)); // 13
var mult23 = partial(mult, 2, 3); // мы зафиксировали первые 2 аргумента mult() как 2 и 3
console.log(mult23(4, 5)); // 2*3*4*5 = 120
console.log(mult23(1, 1)); // 2*3*1*1 = 6
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
запустил сервер через pm2 appjs --watch чтоб он следил за файлами и перезапускал сервер
Есть код с yandex api, тут круто реализовано создание меток, но вопрос
Добрый день! Корзина сайта, по изменению количества меняется стоимость 1 товараТоваров может быть неограничено