function qCompose(...fns){
//判断传入的是否为函数
var length = fns.length
for(let i = 0;i<length; i++){
if(typeof fns[i] !== 'function'){
throw new TypeError('传入的参数不是函数')
}
}
// 返回一个函数这里就是nums nums可能会有多个参数所以用...args
//
return function compose(...args){
var index = 0
//判断qCompose()的fns是否传了函数 如果没有则直接返回nums传的参数值
//如果有则只需fns[index]第0个函数 也就是第一个函数 第一个函数返回值给第二个参数(函数)
//第二个函接受result第一个函数返回值调用 一直循环调用到最后一个
//第一个函数需要调用一次
var result = length? fns[index].apply(this,args):args
for(let index = 1;index<length; index++){
//拿到结果给下一个函数调用
result = fns[index].call(this,result)
}
return result
}
}
// nums(2,3)有两个参数 这里可以接受两个
function num(n,m){
return n * 2 + m
}
//一个函数一般只有一个返回结果 所以第二个函数接受一个结果
function num2(n,m=0){
return n+3+m
}
function num3(n){
return n+100
}
var nums = qCompose(num,num2,num3)
console.log(nums(2,3))
js组合式函数
最新推荐文章于 2024-10-02 05:39:15 发布