Currying
by Artem
JavaScript
'use strict';
let dragon1 =
name =>
size =>
element =>
`${name} --- ${size} --- ${element}`;
let dragon = (name, size, element) =>
`${name} --- ${size} --- ${element}`;
let fluffy = dragon.bind(null, 'fluffy');
let tiny = fluffy.bind(null, 'tiny');
let lightining = tiny.bind(null, 'lightining');
function curry(func) {
function makeFunction(func, args, argvs) {
if (args) {
return function(arg) {
if (argvs) argvs.push(arg);
console.log(arg);
return makeFunction(func, args - 1, argvs);
}
}
return func.apply(this, argvs); // func, 0
}
let res = makeFunction(func, func.length, []);
return res;
// return function() {
// return func.apply(this, arguments);
// }
}
let test = curry(dragon);
let result = test(3)(5)(7).toString();
console.log(result);
// console.log(lightining());
// console.log(dragon1(1)(2)(3));