什么是函數柯里化?實現 sum(1)(2)(3) 返回結果是1,2,3之和
函數柯里化是把接受多個參數的函數變換成接受一個單一參數(最初函數的第一個參數)的函數,並且返回接受余下的參數而且返回結果的新函數的技術
function sum(a) { return function(b) { return function(c) { return a+b+c; } } } console.log(sum(1)(2)(3)); // 6 引申:實現一個curry函數,將普通函數進行柯里化: function curry(fn, args = []) { return function(){ let rest = [...args, ...arguments]; if (rest.length < fn.length) { return curry.call(this,fn,rest); }else{ return fn.apply(this,rest); } } } //test function sum(a,b,c) { return a+b+c; } let sumFn = curry(sum); console.log(sumFn(1)(2)(3)); //6 console.log(sumFn(1)(2, 3)); //6 Function curry(fn,args){ var args = args || []; return function(){ let _args = args.concat([…argunments]); if(fn.length>_args.length){ return curry.apply(this,fn,_args) } else{ return fn.apply(this,_args) } } }