JavaScript:函数柯里化

定义

柯里化是一种将使用多个参数的一个函数转换成一系列使用一个参数的函数的技术。

关键点

1.利用闭包来缓存原函数传递参数

2.如果传递的参数足够原函数使用(传递参数达到形参数量 fun.length )就执行,否则继续合并且缓存参数,返回柯里化函数。

代码

function curry(fun,preArgs=[]){
  return function(...args){
    let curArgs = [...preArgs,...args]
    if(curArgs.length>=fun.length){
      return fun.apply(this,curArgs)
    }else{
      return curry.call(this,fun,curArgs)
    }
  }
}

function add(a,b,c,d,e) {
  console.log('a,b,c,d,e:',a,b,c,d,e)
  console.log('this.name:',this.name)
  return a+b+c+d+e
}

var obj={
  addFun:curry(add),
  name:'Obj'
}
var name = 'Win'

var test1 = obj.addFun(1,2,3)()(4)(5)
//a,b,c,d,e: 1 2 3 4 5
//this.name: Win

var test2 = obj.addFun(1,2,3,4,5)
//a,b,c,d,e: 1 2 3 4 5
//this.name: Obj

var temp = obj.addFun(1,2,3)()(4)
var test3 = temp(5)
//a,b,c,d,e: 1 2 3 4 5
//this.name: Win

console.log(test1,test2,test3)
//15 15 15

文章引用来源:https://github.com/mqyqingfeng/Blog/issues/42

发表评论

您的电子邮箱地址不会被公开。