Есть такая задача(вот тут):
Напиши функцию 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
Сборка персонального компьютера от Artline: умный выбор для современных пользователей