柯里化函数

柯里化函数 -- 期待固定数量参数

//固定参数     

function fixedCurryParams(fn) { var _args = [].slice.call(arguments, 1) return function () { var newArgs = _args.concat([].slice.call(arguments, 0))    return fn.apply(this, newArgs) } }
  //期望参数 参数没给够就一直期望 可以累积参数
function curry(fn, length) { var length = length || fn.length return function () { if (arguments.length < length) { var combined = [fn].concat([].slice.call(arguments, 0)) return curry(fixedCurryParams.apply(this, complay), length - arguments.length) } else { return fn.apply(this, arguments) } } }

测试

 function add(a, b, c, d) {
            return a + b + c + d;
        }

 var newAdd = fixedCurryParams(add, 1, 2)
 var lastAdd = curry(add)
  console.log(newAdd(1,2,3,4))//10   console.log(newAdd(
1, 2)) // 6 var a = lastAdd(1)(2)(3)(5) console.log(a) //11

 应用实例

function ajax(type, url, data) {
    var xhr = new XMLHttpRequest()
    xhr.open(type, url, true)
    xhr.send(data)      
}

//通常会这么写
ajax("post", 'www.test.com', 'name=zhangsan')
ajax("post", 'www.test.com', 'name=wnagwu')
ajax("post", 'www.test.com', 'name=lisi')

//使用柯里化后 可以积累参数
var ajaxCurry = curry(ajax)
var post  = ajaxCurry('post')
post('www.test.com', 'name='zhangsan')

var postParams = post('www.test.com')
postParams('name=zhangsan')
postParams('name=lisi')

 

posted @ 2019-07-25 13:37  那个村  阅读(156)  评论(0编辑  收藏  举报