JSFiddle - React, Tailwind, and code Playground

JavaScript

"use strict";
function add(a, b) { return a + b; }
function mult(a, b, c, d) { return a * b * c * d; }

function partial () {
	var fn = [].shift.apply(arguments);
  var args = [].slice.call(arguments);
  return function() {
  var allArgs = args.concat([].slice.call(arguments));
  return fn.apply(null, allArgs);
  }
}

function partialAny() {
	var fn = [].shift.apply(arguments);
  var args = [].slice.call(arguments);
  return function () {
  var k = 0;
  for (var i = 0; i < args.length; i++) {
  	
  	if (args[i] === undefined) {
    	args[i] = arguments[k];
      k++;
    }
  }
  return fn.apply(null, args);
  }
}

function test(a, b, c, d) { return 'a=' + a + ',b=' + b + ',c=' + c + ',d=' + d; }
var test1_3 = partialAny(test, 1, undefined, undefined, undefined);
var test7_6 = partialAny(test, 1, undefined, 7, undefined);
console.log(test1_3(5,7)); // a=1,b=5,c=3
console.log(test7_6()); // a=1,b=5,c=3

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