javascript高級 --- 惰性函數

一、介紹

惰性函數表示在函數執行的過程中,函數會在首次被成功調用的時候覆蓋當前函數,成功後的邏輯不會被執行。

二、案例

因爲瀏覽器行爲之間的差異,我們在處理一些差異的同時,必須考慮其兼容性問題,例如: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語句了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章