组合(Compose)函数是
在JavaScript开发过程中一种对函数的使用技巧、模式:
- 比如我们现在需要对某一个数据进行函数的调用,执行两个函数fn1和fn2,这两个函数是依次执行的;
- 那么如果每次我们都需要进行两个函数的调用,操作上就会显得重复;
- 那么是否可以将这两个函数组合起来,自动依次调用呢?
- 这个过程就是对函数的组合,我们称之为
组合函数(Compose Function)
;
实现组合函数
例:看下面代码,把一个函数执行的结果作为另一个函数的参数,如果函数很多,执行起来很麻烦,而且阅读性很差
function double(num) {
return num * 2
}
function square(num) {
return num ** 2
}
//把一个数字先乘以2再自身平方求值
const result = square(double(12))
console.log(result)
需求:
实现一个compose函数,执行这个函数返回一个新函数
compose的参数为依次需要调用的函数
给返回的新函数传入参数,参数会被传给compose第一个函数参数,第一个函数参数的执行结果作为参数传递个第二个函数参数,一次执行,等所有函数参数执行完,把结果返回
//实现组合函数;
//compose函数执行返回一个函数,
function compose(...fns) {
}
const bar = compose(double, square)
const result1 = bar(12)
console.log(result1) //576
函数的实现
function compose(...fns) {
//校验传入的参数是否是函数
for(var i = 0; i < fns.length; i++) {
var fn = fns[i]
if(typeof fn !== 'function') {
throw new TypeError("argument must be function")
}
}
return function proxy(...args) {
var index = 0
var result = fns.length? fns[index].apply(this, args):args
while(++index < fns.length) {
result = fns[index].call(this, result)
}
return result
}
}
非常感谢王红元老师的深入JavaScript高级语法让我学习到很多 JavaScript
的知识
网友评论