JS函數柯里化

什麼是函數柯里化

柯里化一般也稱部分求值,其含義是給函數分步傳遞參數,每次傳遞參數後部分應用參數,並返回一個更具體的函數接受剩下的參數,這中間可嵌套多層這樣的接受部分參數函數,直至返回最後結果。
所以柯里化的過程是逐步傳參,逐步縮小函數的適用範圍,逐步求解的過程。
我的理解爲在函數傳執行時函數並不計算結果,而是返回一個新的函數,這個新的函數已經內置了以前的參數,在須要計算結果時再返回結果。閉包

柯里化實現

通用的柯里化函數app

var curry = function (fn) {
       //利用閉包來保存參數
       var _args = [];

       return function () {
           //若是參數爲0返回計算結果
           if (arguments.length === 0) {
               return fn.apply(this, _args);
           }
           
           //不然將參數添加到_args中並返回當前函數
           [].push.apply(_args, arguments);
           return arguments.callee;
       }
   };

柯里化一個求和函數函數

var add = curry(function () {
       return [].reduce.call(arguments, function (a, b) {
           return a + b;
       })
   });

 add(2, 4);
 add(4);
 add(2, 3, 45);  
 //此時函數並未執行加法運算,只是保存了添加的參數

 add();
 //這裏執行了加法運算,返回計算結果60
相關文章
相關標籤/搜索