柯里化是一种将使用多个参数的函数转换成一系列使用一个参数的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
1.什么是函数柯里化
通俗地讲:所谓柯里化就是只传递给函数一部分参数来调用它,让它返回一个新函数去处理剩下的参数。
例如:
function url(a, b, c) {
return `${a}://www.${b}.${c}`
}
const url1 = url('https', "baidu", 'com');
console.log(url1);
柯里化之后:
//柯里化处理后
function url(a){
return (b)=>{
return (c)=>{
return `${a}://www.${b}.${c}`
}
}
}
const url1 = url('https')('baidu')('com');
console.log(url1);
2.柯里化的应用(优点)
1)参数复用
//柯里化处理后
function url(a){
return (b)=>{
return (c)=>{
return `${a}://www.${b}.${c}`
}
}
}
const json1 = url('https');
const url1 = json1('baidu')('com')
const url2 = json1('jingdong')('com')
console.log(url1);
console.log(url2);
通过对函数柯里化处理后,在生成多个类似url地址时就可以复用相同的部分,不用重复传相同的参数,起到了参数复用的效果。
2)延迟调用
function bind(ctx, ...args) {
return () => {
return this.apply(ctx, args) // 这里的this指的就是调用bind方法的那个函数
}
}
var name = "windowName"; //全局name
var age = 22; // 全局age
const obj = {name: 'objName', age: 11}
function intro() {
return `${this.name}-${this.age}`
}
console.log(intro()) //'windowName-22'
console.log(intro.bind(obj)) // ƒ intro (){return ${this.name}-${this.age}}
console.log(intro.bind(obj)()) //'objName-11'
执行结果:

从上面bind方法可以看出,调用bind方法后它只是改变了内部this指向,并返回了一个函数,并没有立即执行该函数,如果想要得到结果,需要再次调用bind方法返回的那个函数才行,所以这点也就说明了柯里化函数有延迟调用的作用。