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