赞
踩
惰性函数:
惰性函数表示,此函数有很多个分支判断,但这些分支判断只会在第一次调用时执行,执行后会修改此函数,再次调用时无须判断。
常用于:
- 针对于去优化频繁使用的函
- 常用于函数库的编写,单例模式中
实例:
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>
第一种:
第二种,惰性函数:
总结: 有时候针对频繁使用的函数和多个条件判断的函数,可以尝试去使用这个惰性函数,也算是前端性能优化的一种方式!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。