一、介紹
惰性函數表示在函數執行的過程中,函數會在首次被成功調用的時候覆蓋當前函數,成功後的邏輯不會被執行。
二、案例
因爲瀏覽器行爲之間的差異,我們在處理一些差異的同時,必須考慮其兼容性問題,例如: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語句了。