柯里化函數---高階函數編程

柯里化函數---高階函數編程

也不知道何時身邊問這個題目的人多了起來,內部討論的時候也說到這個問題,javascript

(柯里化函數編程)這種函數編程模式感受就是多個參數變爲單一參數連續傳入的鏈式操做。java

簡單實現

<!--普通函數-->
    function add(a,b) {
        return a + b
    }
    <!--柯里化函數-->
    function add(a){
        return function(b) {
            return a + b
        }
    }
    這樣參數就能夠連續調用
複製代碼

柯里化的實現功能

  • bind的實現
Function.prototype.bind = function(context) {
  var me = this;
  var args = Array.prototype.slice.call(arguments, 1);
  return function() {
    var innerArgs = Array.prototype.slice.call(arguments);
    var finalArgs = args.concat(innerArgs);
    return me.apply(contenxt, finalArgs);
  }
}
複製代碼

其實寫的很差有興趣的去MDN bind實現的代碼實現吧編程

反柯里化

就是將各類鏈式操做反饋成一個傳參app

function uncurrying(fn) {
  return function(...args) {
    var ret = fn;

    for (let i = 0; i < args.length; i++) {
      ret = ret(args[i]); // 反覆調用currying版本的函數
    }

    return ret; // 返回結果
  };
}
複製代碼
相關文章
相關標籤/搜索