JavaScript中的惰性載入函數(shù)及優(yōu)勢(shì)
定義
惰性載入函數(shù)表示函數(shù)執(zhí)行的分支僅會(huì)發(fā)生一次,有兩種實(shí)現(xiàn)惰性載入函數(shù)的方式,第一種是在函數(shù)被調(diào)用時(shí)再處理,在第一次調(diào)用中,該函數(shù)會(huì)覆蓋為另外一個(gè)按合適方式執(zhí)行的函數(shù),這樣任何對(duì)函數(shù)的調(diào)用都不用再經(jīng)過執(zhí)行的分支了。第二種實(shí)現(xiàn)惰性載入的方式是在聲明函數(shù)時(shí)就制定適當(dāng)?shù)暮瘮?shù),這樣,第一次調(diào)用函數(shù)時(shí)就不會(huì)損失性能了,而在代碼首次加載時(shí)會(huì)損失一點(diǎn)兒性能。
功能
由于現(xiàn)在瀏覽器之間的差異,為了實(shí)現(xiàn)跨瀏覽器工作,很多函數(shù)要書寫大量if語句或者try…catch…語句。當(dāng)每次調(diào)用函數(shù)時(shí),都要對(duì)每個(gè)if分支或try語句進(jìn)行檢查,這樣會(huì)使得瀏覽器反應(yīng)變慢。實(shí)際上,當(dāng)我們用某個(gè)瀏覽器打開網(wǎng)頁時(shí),就決定了某個(gè)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語句的每個(gè)分支都會(huì)為test1變量賦值,有效覆蓋了原有的函數(shù),最后一步便是調(diào)用新賦的函數(shù),下一次調(diào)用test1()的時(shí)候就會(huì)直接調(diào)用被分配的函數(shù),就不會(huì)再走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; } } })();
不同點(diǎn)是使用了立即執(zhí)行函數(shù),通過var來定義函數(shù),在每個(gè)if分支中return一個(gè)函數(shù)。
優(yōu)勢(shì)
惰性載入函數(shù)有兩個(gè)主要優(yōu)點(diǎn),第一是顯而易見的效率問題,雖然在第一次執(zhí)行的時(shí)候函數(shù)會(huì)意味賦值而執(zhí)行的慢一些,但是后續(xù)的調(diào)用會(huì)因?yàn)楸苊獾闹貜?fù)檢測(cè)更快;第二個(gè)是要執(zhí)行的適當(dāng)代碼只有當(dāng)實(shí)際調(diào)用函數(shù)是才執(zhí)行,很多JavaScript庫在在加載的時(shí)候就根據(jù)瀏覽器不同而執(zhí)行很多分支,把所有東西實(shí)現(xiàn)設(shè)置好,而惰性載入函數(shù)將計(jì)算延遲,不影響初始腳本的執(zhí)行時(shí)間。
總結(jié)
以上所述是小編給大家介紹的JavaScript中的惰性載入函數(shù)及優(yōu)勢(shì),希望對(duì)大家有所幫助,也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
javascript實(shí)現(xiàn)圖片輪播簡(jiǎn)單效果
這篇文章主要為大家詳細(xì)介紹了javascript實(shí)現(xiàn)圖片輪播簡(jiǎn)單效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-07-07詳解實(shí)現(xiàn)一個(gè)通用的“劃詞高亮”在線筆記功能
這篇文章主要介紹了實(shí)現(xiàn)一個(gè)通用的“劃詞高亮”在線筆記文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04JS實(shí)現(xiàn)兼容性好,帶緩沖的動(dòng)感網(wǎng)頁右鍵菜單效果
這篇文章主要介紹了JS實(shí)現(xiàn)兼容性好,帶緩沖的動(dòng)感網(wǎng)頁右鍵菜單效果,可實(shí)現(xiàn)帶有彈性效果并且能夠自定義鼠標(biāo)事件的右鍵菜單功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09用js將long型數(shù)據(jù)轉(zhuǎn)換成date型或datetime型的實(shí)例
下面小編就為大家?guī)硪黄胘s將long型數(shù)據(jù)轉(zhuǎn)換成date型或datetime型的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07JavaScript?WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向聊天
這篇文章主要為大家詳細(xì)介紹了如何基于JavaScript?WebSocket實(shí)現(xiàn)實(shí)時(shí)雙向聊天,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考一下2024-04-04用js寫“算24”游戲的思路分析與實(shí)現(xiàn)代碼
“算24”是一種游戲,小時(shí)候玩過,就是一副撲克,把大王,小王除掉,A算1點(diǎn)J,Q,K都算10點(diǎn)。任意抽4個(gè)牌,可以運(yùn)用+-*/()來進(jìn)行運(yùn)算,把最后結(jié)果等于24。2008-05-05深入理解typescript中的infer關(guān)鍵字的使用
infer 這個(gè)關(guān)鍵字,整理記錄一下,避免后面忘記了。具有一定的參考價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-06-06JavaScript進(jìn)制數(shù)之間的互相轉(zhuǎn)換
這篇文章主要介紹了JavaScript進(jìn)制數(shù)之間的互相轉(zhuǎn)換,進(jìn)制轉(zhuǎn)換是人們利用符號(hào)來計(jì)數(shù)的方法,下文基于JavaScript實(shí)現(xiàn)進(jìn)制數(shù)之間的轉(zhuǎn)換,有一定的知識(shí)性參考價(jià)值,需要的小伙伴可以參考一下2022-05-05