javascript学习——高阶函数的几种常见应用

1、curring:部分求值。一个curring的函数会接收一些参数,接受了参数之后的该函数并不会立即求值,而是继续返回一个函数,并把之前传入的参数保存在闭包里面。等到函数真正需要求值的时候,之前传入的所有参数会一次性的用于求值。

var curring = function(fn){
  var args = [];

  return function(){
     if(arguments.length  === 0){
         fn.apply(this,args); 
   }else{
         [].push.apply(args,arguments);
         return arguments.callee;
    }
  }
}

2、uncurring: 它解决的问题是让对象去借用一个不属于自己的方法。

Function.prototype.uncurring = function(){
   var self = this;
   return function(){
     var obj = Array.prototype.shift(arguments);
     return self.apply(obj,arguments);
  }
}

3、函数节流:当函数触发的频率过高,而函数的执行本身比较开销比较大。那么可以把函数的执行放在一个定时器里面,定时器结束之后再统一执行。

var throttle = function(fn,interval){
   var _self = fn,timer,firstTime = true;

   return function(){
     var args = arguments;
     var _me = this;
     if(firstTime){
        _self.apply(_me,args);
       return false;
     }

     if(timer){
       return false;
      }

     timer = setTimeout(function(){
         clearTimeout(timer);
         timer = null;
         _self.apply(_me,args);
      },interval || 500);
   };  
};

4、分时函数:如果一个函数是用户主动发起的,但是这些函数严重影响页面的性能。比如说一次性创建很多节点,那么可以把这些函数分批次执行。

var timeChunk =function(ary,fn,count){
    var obj,t;
    var len = ary.length;

    start = function(){
       for(var i=0; i< Math.min(count||1,len); i++){
           var obj = ary.shift();
           fn(obj);
       }
    };

    return function(){
         t = setInterval(function(
            if(ary.length == 0){
                return clearInteval(t);
            }

            start();
        ),200);
     };
  
};

5、加载惰性函数:在进入第一个分支的时候,函数内部重写这个函数,重写之后的函数就是我们期望得到的函数.常见的就是嗅探函数

var addEvent = function(elem,type,handle){
    if(window.addEventListener){
      addEvent = function(elem,type,handle){
         elem.addEventListener(type,handle);
     }
   }else if(window.attachEvent){
         addEvent = function(elem,type,handle){
           elem.attachEvent('on' + type,handle);
       }
      }
     addEvent(elem,type,handle);
}







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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值