函数柯里化及高阶函数

394 阅读1分钟

函数柯里化

  • 函数柯里化就是函数的一种使用方法,个人理解就是只传递给函数一部分参数来调用它,让它返回一个函数去处理剩下的参数,上代码:

    function currery(fn) {
    let args = [].slice.call(arguments,1)
    return function() {
    let newArgs = [].slice.call(arguments)
    let allArgs = args.concat(newArgs)
    //如果没有传参数则直接返回结果 if(arguments.length === 0) {
    return fn.apply(null, allArgs)
    }
    // 继续柯里化 return currery.call(null,fn, ...allArgs)
    }
    }
    function add (a,b,c) {
    return a + b +c
    }
    let add1 = currery(add,1)
    console.log(add1(9,8)())//18console.log(add1(2)(3)(4)()) //6

  • 从上面代码可以看出,柯里化具有使函数参数复用和延迟执行的能力,另外一个能力是函数可以提前返回,比如我们需要需要添加监听事件,但是不知道目前浏览器是使用哪种监听事件,就可以通过函数柯里化判断使用哪一种,然后直接返回对应的函数,就不需要每次调用都要判断。

高阶函数

  • 高阶函数有两个特点
  1. 可以接收一个或多个函数作为参数

  2. 也可以返回一个函数

    Array.prototype.myMap = function(fn) {
    let result = []
    for(let i=0; i < this.length; i++) {
    let item = this[i]
    let index = i
    result.push(fn(item, index, this))
    }
    return result
    }
    let arr = ['I','LOVE','JS']
    let k = arr.myMap((item, index, arr) => {
    console.log(arr)
    console.log(item)
    return item+"1"
    })
    console.log(k)

  • 上面的代码就是使用高阶函数实现的数组的map方法,类似的高阶函数还有很多,其实高阶函数就是你传一个数据预处理的函数给高阶函数,然后高阶函数把处理结果或者函数返回给你。