实现函数add

功能要求:

add(1); 	// 1
add(1)(2);  	// 3
add(1)(2)(3)// 6
add(1)(2, 3);   // 6
add(1, 2)(3);   // 6
add(1, 2, 3);   // 6

解答:

普通实现:

function add(){
	let args = [...arguments];
	let addfun = function(){
		args.push(...arguments);
		return addfun;
	}
	addfun.toString = function(){
		return args.reduce((a,b)=>{
			return a + b;
		});
	}
	return addfun;
}

 

函数柯里化实现:

const curry = fn => {
    const len = fn.length;
    return function curried(...args) {
        if (args.length === len) {
            return fn.apply(null, args);
        }
        return (..._args) => {
            return curried.apply(null, [...args, ..._args]);
        };
    };
};

const sum = (x, y, z) => x + y + z;
const add = curry(sum);

函数柯里化

posted @ 2022-06-08 09:54  下一秒钟已经不同  阅读(214)  评论(0编辑  收藏  举报