美文网首页
15.js高级函数

15.js高级函数

作者: Ching_Lee | 来源:发表于2018-03-29 13:39 被阅读0次

    1.惰性函数
    惰性载入表示函数执行的分支只会在函数第一次掉用的时候执行,在第一次调用过程中,该函数会被覆盖为另一个按照合适方式执行的函数,这样任何对原函数的调用就不用再经过执行的分支了。
    为了兼容各浏览器,对事件监听的的支持:

    function addEvent (type, element, fun) {
        if (element.addEventListener) {
            element.addEventListener(type, fun, false);
        }
        else if(element.attachEvent){
            element.attachEvent('on' + type, fun);
        }
        else{
            element['on' + type] = fun;
        }
    }
    

    可以看到每次调用事件时都需要去查看各个分支,而我们使用惰性函数进行改进,在第二次的时候会重写该函数,以后就不需要再去走每个分支了。

    function addEvent (type, element, fun) {
        if (element.addEventListener) {
            addEvent = function (type, element, fun) {
                element.addEventListener(type, fun, false);
            }
        }
        else if(element.attachEvent){
            addEvent = function (type, element, fun) {
                element.attachEvent('on' + type, fun);
            }
        }
        else{
            addEvent = function (type, element, fun) {
                element['on' + type] = fun;
            }
        }
        return addEvent(type, element, fun);
    }
    

    2.级联函数
    级联函数又称链式调用,方法链一般适合对一个对象进行连续操作(集中在一句代码)。一定程度上可以减少代码量,缺点是它占用了函数的返回值。

    function Person(){
     this.name="";
     this.age="";
     this.sex="";
    }
    Person.prototype={
    //当改变原型对象时需要重新设置constructor
    constructor:Person,
     setname:function(){
      this.name="katherine";
      return this;
     },
     setage:function(){
      this.age="22";
      return this;
     },
     setsex:function(){
      this.sex='girl';
      return this;
     }
    }
     let p1=new Person().setname().setage().setsex();
    

    3.函数柯里化
    简单来讲就是参数合并

    function curry(fn){
        //首先获取函数除fn之外的剩下的参数
        let args=Array.prototype.slice(arguments,1);
        return function(){
        let innerArgs=Array.prototype.slice.call(arguments);
        let finalArgs=args.concat(innerArgs);
        return fn.apply(this,finalArgs);   
     }
    }
    function add(num1,num2,num3){
        return num1+num2+num3;
    }
    let t=curry(add,50)(1,2);
    alert(t);//53
    
    

    相关文章

      网友评论

          本文标题:15.js高级函数

          本文链接:https://www.haomeiwen.com/subject/fqjmcftx.html