函数组合的定义与方式

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
   
</head>

<body>
  

<script>
   /*
   什么是函数组合?
     就是多个函数进行封装,然后输入一个值,可以得到不同的返回值
   
   */
  
  function lpoh(a){
      return a+"咯咯咯"
  }
  function lpo(a){
      return a
  }
  
 var greet=function(a){
     return lpo(lpoh(a))
 }
  greet(5)
  console.log(greet(5))
  //这样把多个函数组合起来就是函数组合,输入一个值可以得到转换的不同的值
  
  /*
    优化1:
  */
    var compose=function(lpoh,lpo){
        return function(a){
            return lpo(lpoh(a));
        }
    }
    var greet=compose(lpoh,lpo)
    greet(5)
    console.log(greet(5))
    //但这样会右一个问题就是,需要写多个时候的就是需要嵌套很多的compose(d, compose(c, compose(b, a)))
    
    /*
    
     优化compose函数,可以获得多个参数
    */
   function composen() {
       var args = arguments;//这个args是代表这个我们传入的所有函数
       console.log(args)
       var start = args.length - 1;
       
        console.log(start)//1
        
       return function() {
           var i = start;
           var result = args[start].apply(this, arguments);
           
           //这里就说把composen(lpoh,lpo)函数赋值给了 greet(5)函数,所以 greet(5)函数的区域就是composen(lpoh,lpo)返回值的区域
     
           console.log(arguments)//这里只有一个5的数组
           
           console.log(args[start])//此时这个为数组中第二个函数
           
           console.log(result)//5
           
           while (i--) result = args[i].call(this, result);//这里是把上面的5传进来这里我们取调用第一个函数lpoh
           return result;
       };
   };
   var greet=composen(lpoh,lpo)
   greet(5)
   console.log(greet(5))
   
 
</script>
</body>
</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值