JS高阶函数

1.纯函数

函数在有相同的输入时,会有相同的输出  函数的输出和当前运行的函数执行上下文无关

(不影响运行环境,无副作用)

2.防抖

短时间内多次触发事件只执行一次(最开始的一次或最后一次的触发)

防抖的封装  ↓

<input type="text">
<script>

var ipt=document.getElemengtsByTagName('input')[0];
ipt.oninput=dobounce(1000,test);
function debounce(time,hanlder){
    var timer=null;
    return function(){
        clearTimeout(timer);
        var self=this;
        timer=setTimeout(function(){
            hanlder();
        },time)

    }
}
function test(){
console.log(ipt.value)

}

</script>

3.节流

函数在大于等于某一个周期时间才执行,在周期内不执行

防抖的封装  ↓

 <div>0</div>
   <button>点我</button>
   <script>
       var btn=document.getElementsByTagName('button')[0];
       var div=document.getElementsByTagName('div')[0]
       //节流处理
       btn.onclick=thorttle(1000,test)
       function test(){
           //让div的内容进行累加
           div.innerHTML=Number(div.innerHTML)+1
       }

       function thorttle(time,hanlder){
            var lastTime=0;
            //记录每一次点击时间,判断两次点击之间的间隔时间 >=1000ms
            return function(){
                var nowTime=new Data().getTime();
                if(nowTime-lastTime>=time){
                    //让div的内容+1
                    //让btn的点击事件在一秒内  只能执行一次
                    hanlder();
                    lastTime=nowTime;
                }
            }
       }
   </script>

4.柯里化

将接受多个参数的函数进行处理,转换成一次只接受一个参数的函数

作用:简化代码,提升代码的复用性

柯里化的函数   ↓

 <script>
        function add(a,b,c){
            return a+b+c
        }
        //封装一个柯里化函数
        function curry(fu){
            return function curryFn(){
                //1.一次性将所有参数传完
                if(arguments.length<fn.length){
                    //2.没有一次性传完
                    var _arg=Array.from(arguments);
                    return function(){
                        //当这个匿名函数被调用时
                        //看这一传递进来的参数+上一次的参数===fn.length
                        return curryFn(...Array.from(arguments).concat(_arg))
                    }
                }
                return fn(...arguments)
            }
        }
        var curryFn=curry(add)
        console.log(curryFn(1,2,3))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值