JavaScript中的惰性載入函數(shù)及優(yōu)勢
定義
惰性載入函數(shù)表示函數(shù)執(zhí)行的分支僅會發(fā)生一次,有兩種實現(xiàn)惰性載入函數(shù)的方式,第一種是在函數(shù)被調(diào)用時再處理,在第一次調(diào)用中,該函數(shù)會覆蓋為另外一個按合適方式執(zhí)行的函數(shù),這樣任何對函數(shù)的調(diào)用都不用再經(jīng)過執(zhí)行的分支了。第二種實現(xiàn)惰性載入的方式是在聲明函數(shù)時就制定適當?shù)暮瘮?shù),這樣,第一次調(diào)用函數(shù)時就不會損失性能了,而在代碼首次加載時會損失一點兒性能。
功能
由于現(xiàn)在瀏覽器之間的差異,為了實現(xiàn)跨瀏覽器工作,很多函數(shù)要書寫大量if語句或者try…catch…語句。當每次調(diào)用函數(shù)時,都要對每個if分支或try語句進行檢查,這樣會使得瀏覽器反應變慢。實際上,當我們用某個瀏覽器打開網(wǎng)頁時,就決定了某個if分支或try語句是可用的,沒有必要每次調(diào)用都檢查。為了解決以上問題,JavaScript中出現(xiàn)一種名為惰性載入的技巧。
示例
載入方式一
var flag = 1;
function test1() {
if(typeof flag === 'undefined') {
test1 = function() {
return 0;
}
} else if(flag === 1) {
test1 = function() {
return 1;
}
} else {
test1 = function () {
return -1;
}
}
return test1();
}
這里if語句的每個分支都會為test1變量賦值,有效覆蓋了原有的函數(shù),最后一步便是調(diào)用新賦的函數(shù),下一次調(diào)用test1()的時候就會直接調(diào)用被分配的函數(shù),就不會再走if語句了,這樣就可以提高性能。
載入方式二
var flag = 1;
var test2 = (function() {
if(typeof flag === 'undefined') {
return function() {
return 0;
}
} else if(flag === 1) {
return function () {
return 1;
}
} else {
return function () {
return -1;
}
}
})();
不同點是使用了立即執(zhí)行函數(shù),通過var來定義函數(shù),在每個if分支中return一個函數(shù)。
優(yōu)勢
惰性載入函數(shù)有兩個主要優(yōu)點,第一是顯而易見的效率問題,雖然在第一次執(zhí)行的時候函數(shù)會意味賦值而執(zhí)行的慢一些,但是后續(xù)的調(diào)用會因為避免的重復檢測更快;第二個是要執(zhí)行的適當代碼只有當實際調(diào)用函數(shù)是才執(zhí)行,很多JavaScript庫在在加載的時候就根據(jù)瀏覽器不同而執(zhí)行很多分支,把所有東西實現(xiàn)設置好,而惰性載入函數(shù)將計算延遲,不影響初始腳本的執(zhí)行時間。
總結(jié)
以上所述是小編給大家介紹的JavaScript中的惰性載入函數(shù)及優(yōu)勢,希望對大家有所幫助,也非常感謝大家對腳本之家網(wǎng)站的支持!
相關文章
JS實現(xiàn)兼容性好,帶緩沖的動感網(wǎng)頁右鍵菜單效果
這篇文章主要介紹了JS實現(xiàn)兼容性好,帶緩沖的動感網(wǎng)頁右鍵菜單效果,可實現(xiàn)帶有彈性效果并且能夠自定義鼠標事件的右鍵菜單功能,具有一定參考借鑒價值,需要的朋友可以參考下2015-09-09
用js將long型數(shù)據(jù)轉(zhuǎn)換成date型或datetime型的實例
下面小編就為大家?guī)硪黄胘s將long型數(shù)據(jù)轉(zhuǎn)換成date型或datetime型的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07
JavaScript?WebSocket實現(xiàn)實時雙向聊天
這篇文章主要為大家詳細介紹了如何基于JavaScript?WebSocket實現(xiàn)實時雙向聊天,文中的示例代碼講解詳細,有需要的小伙伴可以參考一下2024-04-04
JavaScript進制數(shù)之間的互相轉(zhuǎn)換
這篇文章主要介紹了JavaScript進制數(shù)之間的互相轉(zhuǎn)換,進制轉(zhuǎn)換是人們利用符號來計數(shù)的方法,下文基于JavaScript實現(xiàn)進制數(shù)之間的轉(zhuǎn)換,有一定的知識性參考價值,需要的小伙伴可以參考一下2022-05-05

