闭包之柯里化+偏函数

358 阅读1分钟

闭包

闭包是指有权访问另一个函数作用域中的变量的函数,通常通过在一个函数内创建另一个函数并返回它来实现闭包.闭包将会读取函数内部的变量,将变量一直保存在内存中,因此需要注意不要滥用闭包否则容易造成内存溢出.

函数柯里化

在计算机科学中,柯里化是把接收多个参数的函数变换成接受一个单一参数的函数,并且返回接受余下的参数且返回结果的新函数的技术.

fun(a,b,c) => curry(fun)(a)(b)(c)
  • 延迟执行.通过一次传入多个参数输出结果,转变为每次传入一个参数,直到传入最后一个参数来输出结果,来实现延迟执行.
  • 实现参数复用
  • 偏函数应用
function curry(fn){
  const len = fn.length
  return function subCurry(){
    const args = [...arguments]
    if(args.length >= len){
      return fn.apply(this,args)
    }else{
      return function(){
        const curArgs = [...arguments]
        const totalArgs = args.concat(curArgs)
        return subCurry.apply(this,totalArgs)
      }
    }
  }
}

偏函数

在计算机科学中,偏函数应用是把接收多个参数的函数变换成接收一个或者多个参数但不是全部参数的函数,并且返回一个用来接收余下的参数并返回结果的新函数的过程.

function partial(fn){
  const args = [].slice.call(arguments,1)
  return function(){
    const curArgs = [...arguments]
    return fn.apply(this,args.concat(curArgs))
  }
}