js手写题——高阶函数&函数柯里化&compose函数&ES6装饰器

高阶函数

以函数作为参数/以函数作为返回值/常用于作为函数装饰器
常用高阶函数:防抖Debounce和节流Throttlejs手写题——防抖和节流 Promise、setTimeout等等
为什么要使用高阶函数?减少非纯函数的数量,增加系统稳定性与可靠性,纯函数方便做单元测试。

函数柯里化

函数式编程思想,既能减少代码冗余,也能增加可读性。它利用高阶函数,通过函数调用继续返回函数的形式,将接收多个参数转换为多次接收参数最后统一处理。既然能多次接收,说明上一个函数的执行结果(返回)也是一个函数,这样才能接收参数。
柯里化的一个典型的应用场景就是 bind 函数的实现。
对function中length属性的理解

 const curry=function(fn,...args){
     if([...args].length==fn.length){//fn.length表示函数的形参个数,arguments.length代表传入实参个数。相等即一下子传入所有参数的情况:sum(1,2,3,4)
         return fn(...args);//直接调用函数
     }else{
         return function(...params){//下一个括号里的参数:比如把sum(1)(2)(3)(4)里的2拼进去
             return curry(fn,...args,...params);//如果还不等于4的长度,继续递归调用
         }
     }
 }
 const sum=function(a,b,c,d){
     console.log(a+b+c+d);
 }
 //sum(a,b,c,d);
 //有个curry函数对sum做了个处理,curry(sum),使得处理后的sum可以这样传参:
 //curry(sum)(a)(b)(c)(d) curry(sum)(a,b,c)(d) curry(sum)(a,b)(c,d)输出结果都等同于sum(a,b,c,d)
 curry(sum)(1)(2)(3)(4)

compose函数

简而言之,compose函数可以把f(g(h(x)))这样的嵌套函数调用形式转变成compose(f,g,h)(x)
conpose函数&pip函数
redux中间件和webpack的loader都是用compose实现的。
手写compose:

const compose=function(){
      let args=[...arguments];
      return function(x){
          return args.reduceRight((res,item)=>item(res),x);
      }
  }
  var add=function add(a){
      return a+1;
  }
  var div=function div(a){
      return a/2;
  }
  const res=compose(add,div)(10)
  console.log(res);

ES6装饰器

装饰器是一种特殊类型的声明,“非侵入式的行为修改。”,它能够被附加到类声明、方法,属性或参数上,从而实现扩展类、属性、方法、参数的功能。
常见的装饰器类型:
类装饰器
属性装饰器
方法装饰器
参数装饰器
在这里插入图片描述

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值