JS中的惰性函数

惰性函数:

惰性函数表示,此函数有很多个分支判断,但这些分支判断只会在第一次调用时执行,执行后会修改此函数,再次调用时无须判断。

常用于:

  1. 针对于去优化频繁使用的函
  2. 常用于函数库的编写,单例模式中

实例:

function addEvent(type, element, fun) {
            if (element.addEventListener) {
                console.log((++time)+" time");
                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){
                // console.log((++time)+" time");
                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);
        }

试一试是不是真得就判断一次:


<body>
    <div id="demo" style="background: red;width:100px;height:100px; ">
        
    </div>
    <script>
        var time = 0,tim2 = 0;
        // 经典例子
        function addEvent(type, element, fun) {
            if (element.addEventListener) {
                console.log((++time)+" time");
                element.addEventListener(type, fun, false);
            } else if (element.attachEvent) {
                element.attachEvent('on' + type, fun);
            } else {
                element['on' + type] = fun;
            }
        }
        // 下面我们来重写这个addEvent
        
        // function addEvent(type,element, fun){
        //     if(element.addEventListener){
        //         console.log((++time)+" time");
        //         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);
        // }
        //  由上,第一次调用addEvent会对浏览器做能力检测,然后,重写了addEvent
        //  下次再调用的时候,由于函数被重写,不会再做能力检测
        var div = document.getElementById('demo');
        addEvent('click',div,function(){
            console.log(0);
        });
        addEvent('click',div,function(){
            console.log(1);
        });
        addEvent('click',div,function(){
            console.log(2);
        });
       
    </script>
</body>

第一种:
第一个
第二种,惰性函数:
在这里插入图片描述
总结: 有时候针对频繁使用的函数和多个条件判断的函数,可以尝试去使用这个惰性函数,也算是前端性能优化的一种方式!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值