一、介绍
惰性函数表示在函数执行的过程中,函数会在首次被成功调用的时候覆盖当前函数,成功后的逻辑不会被执行。
二、案例
因为浏览器行为之间的差异,我们在处理一些差异的同时,必须考虑其兼容性问题,例如:addEventListener 、removeEventListener、event、preventDefault、stopPropagation 等等,此时我们就需要根据当前的浏览器环境执行对应的if条件语句,实现兼容适配
比如,最常见的获取事件对象
function getEvent(event) {
let e
if (event) {
e = event
}else if (window.event) {
e = window.event
}else {
e = arguments.callee.caller.arguments[0]
}
return e
}
每次调用getEvent时,会根据当前浏览器支持的能力进行检查
这个过程,会执行每一个if语句,如果浏览器支持一种方法,那之后的方法必然会支持,也就是说,之后的if语句也就没必要再执行,代码还可以运行的更快一些,
*解决方案:惰性函数
三、函数重写
惰性函数
function getEvent(event) {
let e
if (event) {
e = event
getEvent = function (event) {
return event
}
}else if (window.event) {
e = window.event
getEvent = function (event) {
return window.event
}
}else {
e = arguments.callee.caller.arguments[0]
getEvent = function (event) {
return arguments.callee.caller.arguments[0]
}
}
return e
}
函数在第一次执行过程中,如果条件成立,那新的函数会覆盖原函数,下一次函数在执行时,会直接调用新赋值的函数,也就不再执行后面的if语句了。