偏函数
现有的一些参数值固定,从而让函数更加灵活
function mul(a, b) {
return a * b;
}
let double = mul.bind(null, 2);
alert( double(3) ); // = mul(2, 3) = 6
alert( double(4) ); // = mul(2, 4) = 8
alert( double(5) ); // = mul(2, 5) = 10
柯里化
柯里化简单来说就是本来一个函数要好多参数,看着和使用都不方便
于是为了简便和容易阅读,就可以构造一个函数少量多次的传参
柯里化是一种将使用多个参数的一个函数装换成一系列使用一个参数的函数的技术
非柯里化 | 柯里化 |
---|---|
一个函数 | 多个函数 |
多个参数 | 一个参数 |
var add=function(a,b){
return a+b
}
function curry(fn){
let args=[].slice.call(arguments,1)
//tip:注意不能用箭头函数,因为箭头函数不绑定argumnets
return function(){
let newArgs=args.concat([].slice.apply(arguments))
//tip:注意要加return 要不然不能通过clg打印
//tip:注意newArgs只是参数,前面不绑定this要写null
return add.apply(null,newArgs)
}
}
var dealFun=curry(add,1)
console.log(dealFun(2)) //3
var mul=function(a,b){
return a*b
}
//也就是这个函数里面的东西都可以用
function curryMul(fn){
return function(a){
return function(b){
return fn(a,b)
}
}
}
var mulFun=curryMul(mul)
console.log(mulFun(6)(2))//12
// dealFun(1)(2)