组合函数是在JavaScript开发过程中一种对函数的使用技巧、模式:
- 如果我们现在需要对某一个数据进行函数的调用,执行两个函数fn1和fn2,这两个函数是依次执行的;
- 那么如果每次我们都需要进行两个函数的调用,操作上就会显得重复;
- 想将两个函数组合起来,自动依次调用;
- 对函数的组合,我们称之为组合函数。
function compose(fn1, fn2){
return function(x) {
return fn2(fn1(x))
}
}
function double(num){
return num * 2
}
function square (num) {
return num ** 2
}
var calcFn = compose(double, square)
console.log(calcFn(20))
组合函数的封装
上面实现的compose函数比较简单,我们需要考虑更加复杂的情况,比如传入了更多的函数,在调用compose函数时,传入了更多参数。
function compose(...fns){
//边界判断
var length = fns.length
for(var i = 0; i< length; i++){
var fn = fns[i]
if(typeof fn !== "function"){
throw new Error(`index position ${i} must be a function`)
}
}
//返回新的函数
return function(...args) {
var result = fns[0].apply(this, args)
for(var i = 1;i < length; i++){
var fn = fns[i]
result = fn.apply(this, [result])
}
return result
}
}