
背景
在開發(fā)過程中,有時候需要對瀏覽器環(huán)境進行檢測,比如封裝一個AJAX函數(shù)的時候需要寫一個函數(shù)進行檢測,但是常規(guī)的寫法有點累贅了,會檢測很多遍,但是瀏覽器環(huán)境是固定不變的,檢測只需要檢測一遍.這樣就會造成每次調(diào)用這個函數(shù)的時候瀏覽器都會浪費太多時間去再檢測一次.這時候就應(yīng)該用到惰性函數(shù)來解決這個問題
惰性函數(shù)
惰性載入表示函數(shù)執(zhí)行的分支只會在函數(shù)第一次掉用的時候執(zhí)行,在第一次調(diào)用過程中,該函數(shù)會被覆蓋為另一個按照合適方式執(zhí)行的函數(shù),這樣任何對原函數(shù)的調(diào)用就不用再經(jīng)過執(zhí)行的分支了。
下面看一段JS代碼:
function createXHR() {
var xhr;
if (typeof XMLHttpRequest != 'undefined') {
xhr = new XMLHttpRequest();
createXHR = function() {
return new XMLHttpRequest();
}
} else {
try {
xhr = new ActiveXObject("Msxml2.XMLHTTP");
createXHR = function() {
return new ActiveXObject("Msxml2.XMLHTTP");
}
} catch (e) {
try {
xhr = new ActiveXObject("Microsoft.XMLHTTP");
createXHR = function() {
return new ActiveXObject("Microsoft.XMLHTTP");
}
} catch (e) {
createXHR = function() {
return null;
}
}
}
}
return xhr
}
什么意思呢?就是說這個函數(shù)在執(zhí)行第一次的時候正常判斷,只是條件成立的時候會重新改寫這個函數(shù),并返回相應(yīng)的結(jié)果,這樣下次調(diào)用的時候就不會浪費時間再去判斷相關(guān)環(huán)境了